sqlite - 连接科目和考试委员会的简单数据库结构
问题描述
我是 Sql 新手,想使用 sqlite 创建一个数据库来存储有关哪些考试委员会需要哪些主题的数据。
到目前为止,我已经创建了两张表——一张board
叫做topic
. 我不确定我应该如何表示板和主题之间的关系。我已经阅读了一些关于范式的内容,并且我很确定我不应该将多个条目放入一个字段中,而且拥有诸如topic1
等之类的字段topic2
也不是要走的路。
到目前为止,我的 sql 如下。有人可以帮我下一步吗 - 如何让这个数据库真正满足我的要求,同时又不违反书中的每一条规则?
例如,我希望能够快速找出哪些板需要集合论或互易函数等知识。
提前致谢。
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "topic" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"topic_name" TEXT NOT NULL,
"level" INTEGER
);
CREATE TABLE IF NOT EXISTS "board" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"board_name" TEXT NOT NULL UNIQUE,
"link_to_syllabus" TEXT
);
INSERT INTO "topic" ("id","topic_name","level") VALUES (1,'Pythagoras'' Theorem','F');
INSERT INTO "topic" ("id","topic_name","level") VALUES (2,'Circle theorems','H');
INSERT INTO "topic" ("id","topic_name","level") VALUES (3,'',NULL);
INSERT INTO "board" ("id","board_name","link_to_syllabus") VALUES (0,'Edexcel','https://qualifications.pearson.com/en/qualifications/edexcel-gcses/mathematics-2015.html');
INSERT INTO "board" ("id","board_name","link_to_syllabus") VALUES (1,'OCR','https://www.ocr.org.uk/qualifications/gcse/mathematics-j560-from-2015/');
COMMIT;
解决方案
如果我理解,一个板可以有一个或多个主题,一个主题可以在一个或多个板上。如果它是正确的,您正在搜索多对多关系,这是通过表获得的:
CREATE TABLE board_topic (
board_id INTEGER NOT NULL
REFERENCES topic (id),
topic_id INTEGER NOT NULL
REFERENCES board (id),
CONSTRAINT pk PRIMARY KEY (
board_id ,
topic_id
)
)
关于您要求的查询,在您将一些数据插入刚刚显示的关联表后,查询如下所示:
SELECT board.id, board_name FROM board
JOIN board_topic ON board.id = board_topic.board_id
JOIN topic ON topic.id = board_topic.topic_id
WHERE topic_name = "Circle theorems";
推荐阅读
- unity3d - 如何在 Prebuild 中设置 Unity SplashScreen Logo
- react-native - 在 React Native 应用程序中向传递的 this.props.onPress-function 添加一个函数
- azure-cli - 如何在分配了服务主体的 VM 中使用 pwsh 复制“az login -identity”
- javascript - 未处理的承诺拒绝,但使用 .catch()
- javascript - DateTime.MinValue 在 Javascript 中转换为 0001-01-01 08:05:43
- installation - 如何安装 C++ Sydney 10.4.2 的社区版
- wordpress - 如何在 WordPress Learnpress 中根据国家/地区自动更改货币?
- amazon-web-services - 使用 AWS EC2_instance 模块创建多个 EBS 卷
- javascript - 如何在 _app 中调用一次 API 并将数据传递给必要的孩子?
- c++ - 如何在不强制转换或复制签名的情况下使派生类实例的基类模板函数可见?