27-Qt数据库(七)QSqlRelationalTableModel

27-Qt数据库(七)QSqlRelationalTableModel
27-Qt数据库(七)QSqlRelationalTableModel

二十七、Qt数据库(七)QSqlRelationalTableModel

讲完QSqlTableModel了,我们这次讲这个类的扩展类QSqlRelationalTableModel,它们没有太大的不同,唯一的就是后者在前者的基础之上添加了外键(或者叫外码)的支持。

QSqlRelationalTableModel,该类为单张的数据库表提供了一个可编辑的数据模型,它支持外键。

我们还是新建Qt4Gui Application工程,我这里工程名为relationalTableModel,然后选中QtSql模块,Base class选QWidget。工程建好后,添加C++Header File,命名为database.h,更改其内容如下:

#ifndef DATABASE_H

#define DATABASE_H

#include

#include

static bool createConnection()

{

QSqlDatabase db=QSqlDatabase::addDatabase(“QSQLITE”);

db.setDatabaseName(“database.db”);

if(!db.open())return false;

QSqlQuery query;

query.exec(“create table student(id int primary key,name vchar,course int)”);

query.exec(“insert into student values(1,’yafei0′,1)”);

query.exec(“insert into student values(2,’yafei1′,1)”);

query.exec(“insert into student values(3,’yafei2′,2)”);

query.exec(“create table course(id int primary key,name vchar, teacher vchar)”);

query.exec(“insert into course values(1,’Math’,'yafeilinux1′)”);

query.exec(“insert into course values

(2,’English’,'yafeilinux2′)”);

query.exec(“insert into course values

(3,’Computer’,'yafeilinux3′)”);

return true;

}

#endif//DATABASE_H

我们在这里建立了两个表,student表中有一项是course,它是int型的,而course表的主键也是int型的。如果要将course项和course表进行关联,它们的类型就必须相同,一定要注意这一点。

然后将main.cpp中的内容更改如下:

#include

#include“widget.h”

#include“database.h”

int main(int argc,char*argv[])

{

QApplication a(argc,argv);

if(!createConnection())return1;

Widget w;

w.show();

return a.exec();

}

我们在widget.h中添加头文件:#include

然后在private中声明对象:QSqlRelationalTableModel*model;

我们在widget.ui中添加一个Table View部件到窗体上,然后到widget.cpp

中的构造函数里添加如下代码:

model=new QSqlRelationalTableModel(this);

model->setEditStrategy(QSqlTableModel::OnFieldChange);//属性变化时写入数据库

model->setTable(“student”);

model->setRelation(2,QSqlRelation(“course”,”id”,”name”));

//将student表的第三个属性设为course表的id属性的外键,并将其显示为course表的name属性的值

model->setHeaderData(0,Qt::Horizontal,QObject::tr(“ID”));

model->setHeaderData(1,Qt::Horizontal,QObject::tr(“Name”));

model->setHeaderData(2,Qt::Horizontal,QObject::tr(“Course”));

model->select();

ui->tableView->setModel(model);

我们修改了model的提交策略,OnFieldChange表示只要属性被改动就马上写入数据库,这样就不需要我们再执行提交函数了。setRelation()函数实现了创建外键,注意它的格式就行了。

运行效果如下:

可以看到Course属性已经不再是编号,而是具体的课程了。关于外键,你也应该有一定的认识了吧,说简单点就是将两个相关的表建立一个桥梁,让它们关联起来。

那么我们也希望,如果用户更改课程属性,那么他只能在课程表中有的课程中进行选择,而不能随意填写课程。在Qt中的QSqlRelationalDelegate委托类就能实现这个功能。我们只需在上面的构造函数的最后添加一行代码:

ui->tableView->setItemDelegate(new

QSqlRelationalDelegate(ui->tableView));

添加代理(委托),在我这里不知为什么会出现SqlRelationalDelegate is not a type name的提示,不过可以编译通过。

我们需要在widget.cpp中添加头文件:#include

运行效果如下:

可以看到这时修改Course属性时,就会出现一个下拉框,只能选择course表中的几个值。

而利用这个类来操作数据库,与前面讲到的QSqlTableModel没有区别,这里就不再重复。这几篇文章一共讲了好几种操作数据库的方法,到底应该使用哪个呢?那就看你的需求了,根据这几种方法的特点进行选择吧。

自考 管理系统中计算机应用 孟海鹰 精讲班 第四章数据库系统

管理系统中计算机 应用 主讲老师:孟海鹰 第四章数据库系统 主要内容 数据库和数据模型的基本概念★ 关系模型的结构、完整性、关系运算及规范化数据库的安全性 SQL语言的基本概念和基本操作★ 4.1数据库系统概述 4.1.1数据模型 4.1.2关系模型与关系数据库 4.1.3数据规范化 4.1.4数据库的安全性

概念模型 以人的观点模拟物质本身的模型 也称为信息模型 是用户和数据库设计人员交流的语言 独立于任何数据库管理系统,但是又很容易向数据库管理系统所支持的逻辑模型转换概念模型常用术语 1. 实体:指客观存在,并且可以互相区别的事物。 如一个人,一本书。 2. 属性:实体具有的某一特性。 如人的年龄、身高、体重等。 3. 码(实体标识符):能将一个实体与其他实体区别开来的属性或属性组。 如人的身份证号码、考生的准考证号码和课程代码等。 3. 域:属性的取值范围称为该属性的域。例如年龄的域为小于120的整数。 4. 实体型:用实体名及其属性名集合来抽象和刻化同类实体称为实体型。 例如:学生(学号,姓名,性别,成绩)就是一个实体型。 5. 实体集:性质相同的同类实体的集合 如所有男生,所有吉普车等。 7. 联系:实体内部属性之间的联系和实体型之间的联系。可以分为三类: (1)一对一联系(1:1) (2)一对多联系(1:n) (3)多对多联系(m:n) 实体间的联系有两种: (1)不同实体集的实体间联系. 一对一联系(1:1)、一对多联系(1:N)、多对多联系(M:N)

关系有三种类型: 一对一(1:1) 一对多(1:n) 多对多(m:n) (2)相同实体集的实体间联系

第4章+关系数据库设计理论答案

第4章关系数据库设计理论 选择题答案: (1) A (2) B (3) B (4) A (5) D (6) B (7) C (8) B (9) B (10) C (11) D (12) A (13) D (14) D (15) B (16) B (17) D (20) C (21) C (23) A (26) B (27) B (28) B (29) B (30) B (31) D (33) B B D 一、选择题: 1. 为了设计出性能较优的关系模式,必须进行规范化,规范化主要的理论依据是()。 A. 关系规范化理论 B. 关系代数理论C.数理逻辑 D. 关系运算理论 2. 规范化理论是关系数据库进行逻辑设计的理论依据,根据这个理论,关系数据库中的关系必须满足:每一个属性都是()。 A. 长度不变的 B. 不可分解的 C.互相关联的 D. 互不相关的 3. 已知关系模式R(A,B,C,D,E)及其上的函数相关性集合F={A→D,B→C ,E→A },该关系模式的候选关键字是()。 A.AB B. BE C.CD D. DE 4. 设学生关系S(SNO,SNAME,SSEX,SAGE,SDPART)的主键为SNO,学生选课关系SC(SNO,CNO,SCORE)的主键为SNO和CNO, 则关系R(SNO,CNO,SSEX,SAGE,SDPART,SCORE)的主键为SNO和CNO,其满足()。 A. 1NF B.2NF C. 3NF D. BCNF 5. 设有关系模式W(C,P,S,G,T,R),其中各属性的含义是:C表示课程,P表示教师,S表示学生,G表示成绩,T表示时间,R表示教室,根据语义有如下数据依赖集:D={ C→P,(S,C)→G,(T,R)→C,(T,P)→R,(T,S)→R },关系模式W的一个关键字是()。 A. (S,C) B. (T,R) C. (T,P) D. (T,S) 6. 关系模式中,满足2NF的模式()。 A. 可能是1NF B. 必定是1NF C. 必定是3NF D. 必定是BCNF 7. 关系模式R中的属性全是主属性,则R的最高范式必定是()。 A. 1NF B. 2NF C. 3NF D. BCNF 8. 消除了部分函数依赖的1NF的关系模式,必定是()。 A. 1NF B. 2NF C. 3NF D. BCNF 9. 如果A->B ,那么属性A和属性B的联系是()。 A. 一对多 B. 多对一C.多对多 D. 以上都不是 10. 关系模式的候选关键字可以有1个或多个,而主关键字有()。 A. 多个 B. 0个 C. 1个 D. 1个或多个 11. 候选关键字的属性可以有()。 A. 多个 B. 0个 C. 1个 D. 1个或多个 12. 关系模式的任何属性()。 A. 不可再分 B. 可以再分 C. 命名在关系模式上可以不唯一 D. 以上都不是 13. 设有关系模式W(C,P,S,G,T,R),其中各属性的含义是:C表示课程,P表示教师,S表示学生,G表示成绩,T表示时间,R表示教室,根据语义有如下数据依赖集:D={ C→P,(S,C)→G,(T,R)→C,(T,P)→R,(T,S)→R },若将关系模式W分解为三个关系

计算机等级二级MS Office《二级公共基础知识》第4章 数据库设计基础

计算机等级二级MS Office高级应用 《二级公共基础知识》 第4章数据库设计基础 4.1.1 数据、数据库、数据库管理系统与数据库系统 1. 数据:是指描述事物的符号记录。如数字、声音、文字、图片等 2.数据库:简称为DB(Database),是指长期储存在计算机内的、有组织的、可共享的数据集合。注意两点:其一是数据库不仅包括描述事物的数据本身,而且包括相关事物之间的关系。其二是数据库中的数据具有集成与共享的特点。 3. 数据库管理系统:简称为DBMS(Database Management System),是指位于用户与操作系统之间的、方便用户管理与组织数据库的一种数据库管理软件。如Oracle、Access 4. 数据库管理员:由于数据库的共享性,因此对数据库的规划、设计、维护、监视等需要有专人管理,称他们为数据库管理员。 5. 数据库系统:由数据库、数据库管理系统、数据库管理员、硬件平台和软件平台5个部分所组成。简称为DBS(Database System)。注意:人们一般所说的数据库是指数据库系统。 4.1.2 数据库系统的发展 数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。 1.文件系统阶段:它提供了简单的数据共享与数据管理能力,但是它无法提供完整的、统一的、管理和数据共享能力,可以把它看成数据库系统的雏形,而不是真正的数据库系统。 2.层次数据库与网状数据库系统阶段:是真正的数据库系统,但脱胎于文件系统,受文件的物理影响较大。 3.关系数据库系统阶段:当前的主流数据库,系统结构简单,使用方便,逻辑性强物理性少。(数据管理3个阶段的比较,要求理解)

【考试系统】第四章 数据库设计与实现

第四章 数据库设计与实现 系统设计是应用系统开发的重要环节,需要在总体上设计系统应用结构及系统功能。结合需求分析及系统的运行机制,同时针对数据库系统的设计特点和本系统的数据要求,数据库的设计是B/S架构程序中数据库server设计的重要内容,也是本章中重点阐述的内容。 4.1 考试系统的应用程序架构 基于WEB的题库及考试系统采用B/S与C/S相结合的运行机机制,数据库选用SQL Server平台,能够容纳大量的专业知识题库,为客户端提供更快和更稳定的运行环境。 面向众多考生的考试模块和查询模块采用WEB方式构建,无需安装客户端,便于维护和升级,并能够与学院的校园网集成。考试系统的架构如图4-1所示。 图4-1 考试系统架构 系统的所有用户均通过WEB方式通过IIS WEB服务器访问后台SQL SERVER服务器,在局域网范围内,可以保证安全性和性能需求。允许考生通过IE浏览器登录系统,参加考试、查询分数;管理员和课任教师老师通过IE浏览器登录系统,进行试卷录入,课程信息录入,学生考试名单导入,学生成绩查询和用户信息修改等操作。 25

4.2 考试系统的数据库设计 大多数网络应用系统都需要后台数据库的支持。在Windows操作系统中,Access和SQL Server是最常见的网络后台数据库。在互联网上,很多人出于价格的考虑选择Access数据库,但是要实现比较大的网络应用系统,还是应选择SQL Server。为实现在线考试系统,我们选择SQL server 数据库存储数据。 数据库的设计通常涉及三部分的设计即数据库的概念设计、数据库的逻辑设计和数据库的物理设计。 数据库的概念设计是在需求分析的基础上,用概念数据模型如常用的E-R数据模型表示数据及其相互间的联系,概念数据模型是与DBMS无关、面向现实世界的数据模型,是准确表达现实世界数据间关系的重要环节。 数据库的逻辑设计是分析概念设计所得到的概念数据模型,并根据所采用的DBMS的功能和限制,将其转变为逻辑模式,且用数据定义语言DDL或视图来表示。 数据库的物理设计将根据逻辑模式、DBMS及所用计算机系统平台设计数据库的内模式,即文件结构、各种存取路径、存储空间的分配、记录的存储格式等。 4.2.1数据库的概念模型设计(Conceptual Data Model) 概念数据库模型设计的目标是:准确描述应用领域的信息模式,支持用户的各种应用;既易于转换为逻辑数据库模式,又容易为用户理解。 在数据库的概念设计中,E-R数据模型是常用的概念设计表示模型,视图集成法是一种重要的设计方法。考试系统的数据库实体——联系模型(E-R图)如图4-2所示。 如图4-2所示,在线考试系统数据库examine共包含9个关系模式,分别如下: 学生信息表so_tbStu,其数据来自于学生管理系统; 学生考试成绩表student_course;该表的数据来自于选课表,学生只有选了某门课程,方可参加相应课程的考试; 题库信息表so_question,为各科目试题,其中的试题编号与课程编号相关,试题编号前3位为课程编号,后三位为题号; 教师授课信息表so_skb,授课教师只能向题库中添加所授课程的试题以 26

第4章数据库设计方法

数据库系统原理及MySQL应用教程(第2版) 课后习题参考答案 第4章数据库设计方法 1、1.)需求分析阶段 准确了解与分析用户需求(包括数据与处理),是整个设计过程的基础,是最困难、最耗费时间的一步。 2.)概念结构设计阶段 是整个数据库设计的关键,通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。 3.)逻辑结构设计阶段 将概念结构转换为某个DBMS所支持的数据模型,对其进行优化。 4.)数据库物理设计阶段 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。 5.)数据库实施阶段 运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果,建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。6.)数据库运行和维护阶段 数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评价、调整与修改。 2、需求分析阶段的设计目标是通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。调查的内容是“数据’夕和“处理”,即获得用户对数据库的如下要求: ( l)信息要求,指用户需要从数据库中获得信息的内容与性质,由信息要求

可以导出数据要求,即在数据库中需要存储哪些数据; ( 2)处理要求,指用户要完成什么处理功能,对处理的响应时间有什么要求,处理方式是批处理还是联机处理; ( 3)安全性与完整性要求 3、数据字典是系统中各类数据描述的集合。 数据字典的内容通常包括:数据项、数据结构、数据流、数据存储、处理过程五个部分。其中数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构。数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。 数据字典的作用:数据字典是关于数据库中数据的描述,在需求分析阶段建立,是下一步进行概念设计的基础,并在数据库设计过程中不断修改、充实、完善。 4、(1)能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求。是对现实世界的一个真实模型。 (2)易于理解,从而可以用它和不熟悉计算机的用户交换意见,用户的积极参与是数据库的设计成功的关键。 (3)易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充。 (4)易于向关系、网状、层次等各种数据模型转换。 设计概念模型时常用的方法:ER方法 概念模型设计可分三步完成: (1)、设计局部概念模型 (2)、设计全局概念模型,建立全局ER图 (3)、概念模型的评审 5、(1)属性不能再具有需要描述的性质 (2)属性不能与其他实体具有联系 6、关键是消除各局部E-R图中的冲突。 属性冲突的解决方法是与用户协商后解决 命名冲突解决方式是需要与各部门协商讨论后解决 结构冲突解决方法是根据应用语义对实体联系的类型进行综合或调整。

数据库系统基础教程第四章答案

Solutions Chapter 4 c we assume that a phone an d address can only belong to a singl e customer (1-m relationship represented by arrow into customer).

d) In d we assume that an address can only belong to one customer and a phone can exist at only one address.

If the multiplicity of above relationships were m-to-n, the entity set becomes weak and the key ssNo of customers will be needed as part of the composite key of the entity set. In c&d, we convert attributes phones and addresses to entity sets. Since entity sets often become relations in relational design, we must consider more efficient alternatives. Instead of querying multiple tables where key values are duplicated, we can also modify attributes: (i) Phones attribute can be converted into HomePhone, OfficePhone and CellPhone. (ii) A multivalued attribute such as alias can be kept as an attribute where a single column can be used in relational design . concatenate all values. SQL allows a query "like '%Junius%'" to search the multiple values in a column alias.

相关文档
最新文档