[英]How do I properly created a 1 to many relationship in my database?
如果我有下表(括号中有PK)...
Store { [StoreCode], PhoneNumber, Address, ...}
StoreHours { [id], DayofWeek, Open, Close, ClosedDate }
现在,我的想法是每个商店都不会有相同的时间,而且每天也不会有相同的时间,而不是在Store表中创建多个列,例如“ OpenTimeA
, OpenTimeB
, OpenTimeC
, CloseTimeA
, CloseTimeB
,...”,然后我可以创建一个关系表。 但是,我不习惯做这些事情,而是想继续进行,并在第一时间解决问题。 这就是我想添加到上表中的内容...
Has_a { [StoreCode, id ] }
我的问题是我是否以此方式做...
有没有比Has_a
更好的命名表的方法,或者我可以为它命名并将其用于商店的多种不同类型的关系。 例如,添加另一个表Managers
并在Has_a
表中添加一列作为Manager ID。
喜欢...
StoreInformation { [StoreCode], TimeId, ManagerId, ...}
对于第一个问题,一个可能的解决方案是(标准的一对多关系):
Store
StoreCode
PhoneNumber
Address
...
PRIMARY KEY (StoreCode)
StoreHours
StoreCode
DayOfWeek
OpenTime
CloseTime
PRIMARY KEY (StoreCode, DayOfWeek)
FOREIGN KEY (StoreCode)
REFERENCES Store(StoreCode)
如果您发现有很多商店在一周中的所有时间都同时打开和关闭,则可以添加一个Schedule
表,以便多个Store可以共享相同的Schedule。
Store
StoreCode
ScheduleId
PhoneNumber
Address
...
PRIMARY KEY (StoreCode)
FOREIGN KEY (ScheduleId)
REFERENCES Schedule(ScheduleId)
Schedule
ScheduleId
ScheduleTitle
PRIMARY KEY (ScheduleId)
ScheduleHours
ScheduleId
DayOfWeek
OpenTime
CloseTime
PRIMARY KEY (ScheduleId, DayOfWeek)
FOREIGN KEY (ScheduleId)
REFERENCES Schedule(ScheduleId)
创建通用的Has_a
表以跟踪这些类型的关系的最大问题是,由于只能将单个源表与单个目标表相关联,因此您将无法使用表之间的外键关系。 除此之外,除非您对密钥使用GUID,否则无法知道特定密钥属于哪个表,因此您可能会得到假结果。
同样,对于一对多关系,不需要这种中间表。 您可以使用适当的外键将StoreCode
列添加到StoreHours
表中。 您唯一需要中间表的情况是多对多关系,在这种情况下可能不需要(除非您希望多个商店共享同一StoreHours
记录)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.