【问题标题】:How uniquely identify normalize one to many relationship如何唯一标识规范一对多关系
【发布时间】:2013-04-10 00:51:02
【问题描述】:

我有一个数据库,其中包含药物提醒和药物提醒有不同的时间表,这些时间表(一天两次)有不同的提醒发生(提醒到来的日期),所以都有一对多的关系。

                        |----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 没有直接关系。请帮帮我 提前致谢

【问题讨论】:

    标签: mysql database sqlite normalization database-schema


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      • 2010-09-26
      • 2022-01-03
      • 2015-06-18
      • 1970-01-01
      相关资源
      最近更新 更多