說我們有這樣的場景:數據庫設計:贊成抽象還是外鍵約束?
Artist ==< Album ==< Track
//ie, One Artist can have many albums, and one album can have many tracks
在這種情況下,所有3個實體具有基本相同的字段:
- ID
- 名稱
- 的一對多關係的外國到相應的孩子(藝術家專輯和專輯跟蹤
對於提供的解決方案,一個典型的解決方案是三個表,在一對多關係字段中具有相同的字段(ArtistID,AlbumID等)和外鍵約束。
但是,我們可以在這種情況下,納入一種形式的繼承,以避免重複相同的領域?我說的那種東西:
Table: EntityType(EntityTypeID, EntityName)
This table would hold 3 entities (1. Artist, 2. Album, 3. Track)
Table: Entities(EntityID, Name, RelField, EntityTypeID)
This table will hold the name of the entity (like the name of
an artist for example), the one-many field (foreign-key
of EntityID) and EntityTypeID holding 1 for Artist, 2 for Album
and so on.
你覺得上面的設計是什麼?在這個DB場景中加入「OOP概念」是否有意義?
最後,你更喜歡有第一種場景的外鍵約束還是更通用的(具有將藝術家鏈接到Track的風險,例如,因爲沒有檢查來查看輸入的外鍵價值真的是一張專輯)的方法?
..btw,想一想,我想你實際上可以檢查一個藝術家的RelField的輸入值是否對應一個專輯,觸發器可能是什麼?
難道不關你的專輯有多位藝術家?你的曲目中是否有多個藝術家?你也沒有錄製像樂隊(管絃樂隊)演奏音樂,獨奏者,指揮,作曲家,編曲者等等的東西。啊,這只是一個問題,但要小心過度簡化。 – 2009-04-08 03:19:14