外键该建在哪一边

一位老师带好几门课(一对多)。这条关系的外键应该建在【0】。

开始练习 →

外键让数据库替你管住什么

给课程表的老师编号加上外键约束之后,数据库会替你管住【0】。

开始练习 →

中间表的主键挡住了什么

往选课表里插一条已经存在的选课记录,看会发生什么。输出两样:违反了哪一条约束、表里还剩几行(用 / 隔开)。 enroll_flat(一张宽表,什么都塞在里面) student phone course teacher room 阿

开始练习 →

自己写:给宽表挑一个主键

宽表 enroll_flat 没有主键。数一数:哪两列合起来才能唯一确定一行?程序会分别数出"学生列各不相同的个数"、"学生+课程两列组合各不相同的个数"、和总行数。输出三个数(用 / 隔开)。 en

开始练习 →

自己写:往选课表里插一个不存在的学生

选课表里插一条指向"不存在的学生编号 99"的记录。⚠️ 这份 schema 没有写外键约束,所以它会插进去。输出两个数:插入之后选课表几行、其中能连回学生表的有几行(用 / 隔开)。 enroll_flat(一张宽表,

开始练习 →

自己写:建一张带外键的表

重新建一张选课表,这次带上外键约束,再插同样那条指向 99 号学生的记录。输出两样:违反了哪一条、新表里有几行(用 / 隔开)。 enroll_flat(一张宽表,什么都塞在里面) student phone course teach

开始练习 →

第一范式要求什么

第一范式最基本的一条要求是【0】。

开始练习 →

第二、第三范式在管什么

第二范式和第三范式管的都是【0】。

开始练习 →

范式是不是越高越好

把一份设计一路规范化到很高的范式,代价是【0】。

开始练习 →

⚠️ 一格塞一串:加一门课就多算一个

把选课写成一格 "数学,英语",用模糊匹配数"选了数学的有几人"。然后再加一位学生选了高等数学,同样再数一次。输出两次的结果(用 / 隔开)。 import sqlite3 db = sqlite3.

开始练习 →