【自制软件】PDF学习宝-开发日记11--创建表

291 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情


📒博客首页:何名取 的个人主页 - 文章 - 掘金 (juejin.cn)
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
❤️期待一起交流!
🙏作者水平很有限,如果发现错误,求告知,多谢!
🌺有问题可私信交流!!!


创建表

前言

上节从设计角度讨论了数据模型,本节将对上节讨论的内容进行一下细化,并且使用Qt所支持的SQLite数据库来创建所需的表。共包括六个表:

  • PDF电子书信息表
  • 题目信息表
  • 选择题信息表
  • 判断题信息表
  • 简答题信息表
  • 填空题信息表

细化表设计

在进行约束设计时,要注意的是各个表的外键,这是最容易忽略的地方。

PDF电子书信息表

列名说明数据类型约束
Book_id图书号intnot null primary key
Book_name书名textnot null
Book_pos存放位置textnot null

题目信息表

列名说明数据类型约束
Qst_id题目号intnot null primary key
Qst_type类型charnot null
Qst_Book图书号intnot null foreign key
Qst_Page页码intnot null

选择题信息表

列名说明数据类型约束
ChoiceQst_id选择题号intnot null primary key
ChoiceQst_Question题目号intnot null foreign key
ChoiceQst_Info内容textnot null
ChoiceQst_OP1选项1textnot null
ChoiceQst_OP2选项2textnot null
ChoiceQst_OP3选项3textnot null
ChoiceQst_OP4选项4textnot null
ChoiceQst_Answ答案charnot null

判断题信息表

列名说明数据类型约束
TofQst_id判断题号intnot null primary key
TofQst_Question题目号intnot null foreign key
TofQst_Info内容textnot null
TofQst_Answ答案charnot null

简答题

列名说明数据类型约束
SAQs_id简答题号intnot null primary key
SAQs_Question题目号intnot null foreign key
SAQs_Info内容textnot null
SAQs_Answ答案textnot null

填空题

列名说明数据类型约束
GFQs_id填空题intnot null primary key
GFQs_Question题目号intnot null foreign key
GFQs_Info内容textnot null
GFQs_Answ答案textnot 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软件查看创建好的表: image.png