我期待在现有的数据库模式,我有点糊涂关于1:在下面的示例1 realtionship:为什么有1:1的关系 - 数据库设计?
Event
-----
id int (PK)
Title varchar
Description varchar
OrganizerId int (FK)
EventSchedule
------------
id int (Pk)
EventId int (FK)
Start datetime
End datetime
RepeatRule varchar (ical format for repeating events)
Venue
-----
id int (PK)
EventId (FK)
Name varchar
Address1 varchar
Address2 varchar
City varchar
Region varchar
Postcode varchar
latitude float
longitude float
的事件永远只发生在一个位置,所以有一个1 :事件和场地之间的关系1。 类似地,事件与EventSchedule的关系为1:1 - ical重复规则捕获重复事件。
是否有任何理由或实例来分隔这样的表?什么是错在具有单个表如下:
Event
-----
id int (PK)
Title varchar
Description varchar
OrganizerId int (FK)
Start datetime
End datetime
RepeatRule varchar (ical format for repeating events)
Venue varchar
Address1 varchar
Address2 varchar
City varchar
Region varchar
Postcode varchar
latitude float
longitude float
的利弊一些建议/每个设计的缺点会被特别是在上述背景下认识,使架构未来考虑足够的灵活性,但我可以”牛逼可能想到的任何原因何在上述关系将永远在真实的场景,即1变为:1至1:N等我能想到的,标准化的表是这样
提出的模式似乎更加灵活,并且已经准备好接受大多数类型的事件,而你的看起来高度专业化(我发现它不太可能只会使用一次场所,并且发生不止一次的事件似乎不会对我来说也不常见)。所以,答案与往常一样,正确的答案可能完全取决于你的使用情况...... – fvu
正如fvu所提到的那样,它不太可能作为场地只能使用一次。它也是最佳实践(第三范式)来分离所有实体类型。通过适当的规范化数据库,未来的开发和灵活性将变得更加容易。此外,您可以在报告数据时消除复杂的问题。如果你的事件不止一次发生在不同的场地,我会尽可能创建3个表格。 EventType(描述,名称等事件信息),事件(场地和事件类型之间的关系,日期,特定事件详细信息等)以及场地。 –
@fvu Venue表包含FK EventId,它是1:1的关系。一个事件不能发生在多个地点 - 如果是这样的话,它将被归类为不同的事件和创建的新记录。如果在同一地点发生了另一个事件,则会在地点表中插入一条新记录,其地址详细信息相同。那么如何使用相同的场地呢?同样,如果一个事件发生多次,细节将包含在ical重复规则中,即不需要在EventSchedule表中为同一事件创建一行。 – adam78