Mysql Period Column和Junction Table

时间:2016-07-12 12:05:09

标签: mysql sql database-design mysql-workbench

我们在学校的技术顾问建议我在创建联结表之前开始创建实体主表。他还鼓励我使用复合PRIMARY KEYS而不是COMPOSITE UNIQUE键作为列。

他告诉我们在编程GUI之前大部分时间都花在数据库上,所以我需要确保表设计不会导致任何问题。

所以,让我们说,

ONE 类拥有或属于 MANY schoolyear = TRUE

ONE schoolyear MANY 类= TRUE

让我觉得有3个表,

(设计1):

表1:课程

id PK
name
yearlevelId

结点表2:SchoolYearClasses

id PK AI
classId -- FK REFERENCES classes(id)
schoolYearId -- FK REFERENCES schoolyear(id)

表3:SchoolYear

id PK AI
schoolYearStart
schoolYearEnd

优于此

(设计2):

id PK AI
name
yearlevelId  -- FK REFERENCES yearLevel(id)
schoolyearId -- FK REFERENCES schoolyear(id)

学年

id PK AI
schoolYearStart
schoolYearEnd

我需要一些专业建议,因为我确定你们处理过很多涉及时期的系统。我知道设计会影响事务插入生成以及连接。

哪种设计更好? 如果大多数列都是数字(id),我该如何插入记录?

我很感激任何帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

对于“联结”表(实现多对多映射),我强烈反对使用AUTO_INCREMENT。你有一个非常好的复合PK,而且你需要在另一个INDEX中以相反的顺序使用这对id。结束。

More on a good schema for M:N。这给了“为什么”。

我同意@Drew -

  1. 在GUI上工作一段时间。
  2. 然后您将了解所需的SELECTs
  3. 根据您的两个设计草绘SELECTs。很明显,一个架构更好。
  4. 然后完成架构设计。
  5. 六个月后改进了架构。 (是的,你会发现“最终”的设计并不是那么好。)