如何唯一地识别一对多关系的规范化

时间:2013-04-17 09:54:42

标签: mysql database sqlite normalization database-schema

我有一个有药物提醒和药物提醒的数据库有不同的时间表,这些时间表(每天两次)有不同的提醒事件(提醒来自的日期)所以所有人都有一对多的关系。

                        |----SCHEDULE1 ----|----OCCURRENCE1

                        |----SCHEDULE1 ----|----OCCURRENCE2

MEDICATION_REMINDER --- |----SCHEDULE2 ----|----OCCURRENCE1

                        |----SCHEDULE2 ----|----OCCURRENCE2

现在我可以存储这些值,如

MEDICATION_REMINDER(MEDICATION_REMINDER_ID,OTHER_DETAILS)

SCHEDULE(MEDICATION_REMINDER_ID_FK,SCHEDULE_ID,TIMES)// PK是MEDICATION_REMINDER_ID_FK,SCHEDULE_ID

OCCURRENCE(SCHEDULE_ID_FK,OCCURRENCE_ID,DATE_TIME)//现在没有主要关键

现在不能唯一地识别出现 例如

  

M1和M2有两个时间表S1(上午7:00)和S2(下午8:00),S1有三个   事件说o1,o2,o3和S2也有三次出现o1   ,o2,o3

现在我的桌子是

MEDICATION_REMINDER
_____________________
M1
M2
_____________________

SCHEDULE
__________________
M1   S1    7:00AM
M1   S2    8:00PM
M2   S1    7:00AM
M2   S2    8:00PM
__________________


OCCURRENCE
__________________
S1    O1   21-04-13 7:00AM
S1    O2   22-04-13 7:00AM
S1    O3   23-04-13 7:00AM
S2    O1   21-04-13 9:00PM
S2    O2   22-04-13 9:00PM
S2    O3   23-04-13 9:00PM

S1    O1   21-04-13 7:00AM
S1    O2   22-04-13 7:00AM
S1    O3   23-04-13 7:00AM
S2    O1   21-04-13 9:00PM
S2    O2   22-04-13 9:00PM
S2    O3   23-04-13 9:00PM

__________________

如何唯一地标识出现表行。最好将MEDICATION_REMINDER_ID存储在OCCURRENCE表中。我不想那样做因为OCCURRENCE表和MEDICATION_REMINDER 没有直接的关系。请帮帮我 提前谢谢

1 个答案:

答案 0 :(得分:0)

虽然MEDICATION_REMINDER和OCCURRENCE没有直接关系,但OCCURRENCE与SCHEDULE有直接关系。 SCHEDULE的主键是MEDICATION_REMINDER_ID,SCHEDULE_ID,因此要建立SCHEDULE和OCCURRENCE之间的关系,需要在两个表之间建立外键关系。这意味着SCHEDULE的主键必须在OCCURRENCE中显示,因此MEDICATION_REMINDER_ID需要包含在OCCURRENCE中。这也提供了唯一标识OCCURRENCE实例的方法。