如果我有以下表格(括号中有PK)......
Store { [StoreCode], PhoneNumber, Address, ...}
StoreHours { [id], DayofWeek, Open, Close, ClosedDate }
现在我的想法是每个商店都没有相同的时间和时间。它们不会每天都有相同的小时数,而不是在商店表中创建多个列,例如“OpenTimeA
,OpenTimeB
,OpenTimeC
,CloseTimeA
,{{1} },...“,然后我可以创建一个关系表。但是,我不习惯这样做,并希望继续前进,并在第一时间做到正确。以下是我在考虑添加到上表中的内容......
CloseTimeB
我的问题是,如果我这样做......
是否有更好的方法来命名表而不是Has_a { [StoreCode, id ] }
,或者我可以将其命名为并将其用于商店的多种不同类型的关系。例如,添加另一个表Has_a
并在Managers
表中为经理ID添加一列。
像...
Has_a
答案 0 :(得分:2)
对于第一个问题,一个可能的解决方案是(标准的1对多关系):
Store
StoreCode
PhoneNumber
Address
...
PRIMARY KEY (StoreCode)
StoreHours
StoreCode
DayOfWeek
OpenTime
CloseTime
PRIMARY KEY (StoreCode, DayOfWeek)
FOREIGN KEY (StoreCode)
REFERENCES Store(StoreCode)
如果您发现有多个商店在同一时间(一周中的所有日期)打开和关闭,您可以添加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)
答案 1 :(得分:2)
创建用于跟踪这些关系的通用Has_a
表的最大问题是,您将无法在表之间使用外键关系,因为您只能关联单个源表到一个目的地表。除此之外,除非您使用GUID作为密钥,否则无法知道特定密钥属于哪个表,因此您可能会获得虚假结果。
此外,对于一对多关系,不需要这种中间表。您可以使用适当的外键将StoreCode
列添加到StoreHours
表。您需要中间表的唯一情况是多对多关系,在这种情况下可能不需要(除非您希望多个商店共享相同的StoreHours
记录)。