持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
📒博客首页:何名取 的个人主页 - 文章 - 掘金 (juejin.cn)
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
❤️期待一起交流!
🙏作者水平很有限,如果发现错误,求告知,多谢!
🌺有问题可私信交流!!!
创建表
前言
上节从设计角度讨论了数据模型,本节将对上节讨论的内容进行一下细化,并且使用Qt所支持的SQLite数据库来创建所需的表。共包括六个表:
- PDF电子书信息表
- 题目信息表
- 选择题信息表
- 判断题信息表
- 简答题信息表
- 填空题信息表
细化表设计
在进行约束设计时,要注意的是各个表的外键,这是最容易忽略的地方。
PDF电子书信息表
| 列名 | 说明 | 数据类型 | 约束 |
|---|---|---|---|
| Book_id | 图书号 | int | not null primary key |
| Book_name | 书名 | text | not null |
| Book_pos | 存放位置 | text | not null |
题目信息表
| 列名 | 说明 | 数据类型 | 约束 |
|---|---|---|---|
| Qst_id | 题目号 | int | not null primary key |
| Qst_type | 类型 | char | not null |
| Qst_Book | 图书号 | int | not null foreign key |
| Qst_Page | 页码 | int | not null |
选择题信息表
| 列名 | 说明 | 数据类型 | 约束 |
|---|---|---|---|
| ChoiceQst_id | 选择题号 | int | not null primary key |
| ChoiceQst_Question | 题目号 | int | not null foreign key |
| ChoiceQst_Info | 内容 | text | not null |
| ChoiceQst_OP1 | 选项1 | text | not null |
| ChoiceQst_OP2 | 选项2 | text | not null |
| ChoiceQst_OP3 | 选项3 | text | not null |
| ChoiceQst_OP4 | 选项4 | text | not null |
| ChoiceQst_Answ | 答案 | char | not null |
判断题信息表
| 列名 | 说明 | 数据类型 | 约束 |
|---|---|---|---|
| TofQst_id | 判断题号 | int | not null primary key |
| TofQst_Question | 题目号 | int | not null foreign key |
| TofQst_Info | 内容 | text | not null |
| TofQst_Answ | 答案 | char | not null |
简答题
| 列名 | 说明 | 数据类型 | 约束 |
|---|---|---|---|
| SAQs_id | 简答题号 | int | not null primary key |
| SAQs_Question | 题目号 | int | not null foreign key |
| SAQs_Info | 内容 | text | not null |
| SAQs_Answ | 答案 | text | not null |
填空题
| 列名 | 说明 | 数据类型 | 约束 |
|---|---|---|---|
| GFQs_id | 填空题 | int | not null primary key |
| GFQs_Question | 题目号 | int | not null foreign key |
| GFQs_Info | 内容 | text | not null |
| GFQs_Answ | 答案 | text | not null |
创建表
以下代码是在Qt中使用SQLite数据库创建表的代码:
//创建pdf图书信息表
QString createTable = "CREATE TABLE book \
( \
Book_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\
Book_name TEXT NOT NULL, \
Book_pos TEXT NOT NULL \
);";
query->prepare(createTable);
if(!query->exec())
return -1;
//创建题目信息表
createTable = "CREATE TABLE question \
( \
Qst_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\
Qst_type CHAR NOT NULL, \
Qst_Book INTEGER NOT NULL, \
Qst_Page INTEGER NOT NULL, \
FOREIGN KEY(Qst_Book) REFERENCES book(Book_id) \
);";
query->prepare(createTable);
if(!query->exec())
return -1;
//创建选择题信息表
createTable = "CREATE TABLE ChoiceQst \
( \
ChoiceQst_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\
ChoiceQst_Question INTEGER NOT NULL, \
ChoiceQst_Info TEXT NOT NULL ,\
ChoiceQst_OP1 TEXT NOT NULL ,\
ChoiceQst_OP2 TEXT NOT NULL ,\
ChoiceQst_OP3 TEXT NOT NULL ,\
ChoiceQst_OP4 TEXT NOT NULL ,\
ChoiceQst_Answ CHAR NOT NULL, \
FOREIGN KEY(ChoiceQst_Question) REFERENCES question(Qst_id) \
);";
query->prepare(createTable);
if(!query->exec())
return -1;
//创建判断题信息表
createTable = "CREATE TABLE TofQst \
( \
TofQst_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\
TofQst_Question INTEGER NOT NULL, \
TofQst_Info TEXT NOT NULL ,\
TofQst_Answ TEXT NOT NULL ,\
FOREIGN KEY(TofQst_Question) REFERENCES question(Qst_id) \
);";
query->prepare(createTable);
if(!query->exec())
return -1;
//创建简单题信息表
createTable = "CREATE TABLE SAQst \
( \
SAQs_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\
SAQs_Question INTEGER NOT NULL, \
SAQs_Info TEXT NOT NULL ,\
SAQs_Answ TEXT NOT NULL ,\
FOREIGN KEY(SAQs_Question) REFERENCES question(Qst_id) \
);";
query->prepare(createTable);
if(!query->exec())
return -1;
//创建填空信息表
createTable = "CREATE TABLE GFQst \
( \
GFQs_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\
GFQs_Question INTEGER NOT NULL, \
GFQs_Info TEXT NOT NULL ,\
GFQs_Answ TEXT NOT NULL ,\
FOREIGN KEY(GFQs_Question) REFERENCES question(Qst_id) \
);";
query->prepare(createTable);
if(!query->exec())
return -1;
下图是使用Navicat软件查看创建好的表: