我期待在現有的數據庫模式,我有點糊塗關於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