如何引用多对多关系的交集表?

时间:2014-12-26 15:59:20

标签: mysql database database-design normalization

我正在创建一个处理处方的药房数据库。在设计数据库时,我考虑到医生可以在许多办公室工作,办公室可以是许多医生的家,所以我创建了以下多对多的关系:

doctor:

| id | name | // more

office:

| id | name | address | // more

doctors_offices:

| doctor_id | office_id |

我遵循了我在数据库教科书中看到的设计以及许多在线资源,但我现在在尝试创建prescription表时遇到了一点混乱。在这张表中,我想知道不仅是哪位医生写了处方,而是在哪个位置。

我发现自己有几个选择:

  • doctors_offices表添加auto_increment密钥,以便为每个博士/办事处配对设置唯一标识符
  • 将复合外键添加到引用doctors_offices的处方表中。 (这可能吗?)
  • 在处方表中添加两个外键。一个引用doctors,另一个引用offices

哪些选项最常规化?我知道第三个可能是最少标准化,因为它开启了我选择医生不属于的办公室的可能性,但我觉得很重要,因为它可能是一个常见的一些初学数据库设计师的直觉。

1 个答案:

答案 0 :(得分:5)

如果您将doctor_id以及location_id与处方数据一起保存,则会更灵活。否则,如果医生在已经给予一些处方后搬到另一个办公室,你会遇到困难,除非你在某个办公室的医生出现的每个时间段都有新的记录。此外,如果办公室里有另一位医生,并且尽管他或她没有办公室任务,他也不能正确地描述这种情况。

如果系统因技术原因阻止他们插入数据,人们往往会变得聪明,你应该始终考虑这些例外,因为它们会发生。