我有一个部门表,其中Department_id作为主键。
我需要创建一个教师表,其中一行可以引用department_id中的两个值
部门= [("EC", "ELECTRONICS"), ("CS", "Computer Science")]
老师= ("T001", "teacher1", ["CS", "EC"])
是否可以创建这样的表?
答案 0 :(得分:1)
Department (DeptCode [PK], Name): EC, ELECTRONICS CS, Computer Science Teacher (TeacherId [PK], Name, DeptList): 123, Teacher1, CS 234, Teacher2, EC 345, Teacher3, [CS, EC]
不。在数据库表中不能接受Excel电子表格中可能出现的情况。单列CSV是严重错误。它同时破坏了第一范式和第二范式(Dr E F Codd的定义):
每个域(属性)必须是平台的原子
意思是,每个属性都不能被整除。
每个域(属性)不得为集合(重复值)
CSV是可分割的,和是一组重复值。如果违反规则,则将没有数据库,可以轻松查询该数据库。您将拥有一桶鱼,有时会起作用。
重复值存储在下级表中。这是关联表,系部门和教师的下属。 PK是组合的,是关系数据库中的标准票价。习惯它。该表不需要另一个id
字段。
Department (DeptCode [PK], Name): EC, ELECTRONICS CS, Computer Science Teacher (TeacherId [PK], Name): 123, Teacher1 234, Teacher2 345, Teacher3 TeacherDepartment (TeacherId, DeptCode) PK (TeacherId, DeptCode): 123, CS 234, EC 345, CS 345, EC
答案 1 :(得分:0)
虽然您可以创建一个名为教师的表,并具有一个varchar字段,该字段可以将department_details存储为逗号分隔的字符串。从RDBMS的角度来看,这是错误的设计。
您可能希望将教师与部门之间的关系保留在另一个表格中。
+------------+---------------+
| teacher_id | department_id |
+------------+---------------+
| 100 | CS |
| 100 | EC |
+------------+---------------+