0
我正在創建電影信息數據庫,但堅持設計1電影與其他電影之間的關係表。電影關係數據庫設計
例如:復仇者是復仇者2的前傳,但我應該存儲在我的數據庫反向關係(續集)?我應該將關係分解爲分離的表格嗎?目前我有3個選擇,但這是設計數據庫的最佳實踐嗎?
選擇1:兩個表對關係存儲在關係映射內
Movies: id, title, ...
Relation_maps: id, movie_id, related_movie_id, relation_text, reverse_relation_text
所以,如果我有2部電影:復仇者和復仇者2.我有一個relation_text關係映射的「前傳」和反向的「續集」
備選2關係文本:分割成關係分隔的表,並存儲相反的關係作爲表本身
的一個idMovies: id, title, ...
Relation_maps: id, movie_id, related_movie_id, relation_id
Relations: id, reverse_relation_id (self-refer to id), relation_text
關係文本,將被存儲在另一個表中存儲作爲自參照ID相反的關係。因此,在關係表,它會變成這個樣子:
id | reverse_relation_id | relation_text
1 | 2 | prequel
2 | 1 | sequel
方案3:拆分成關係分隔的表和反向關係,將通過有條件的代碼所示
Movies: id, title, ...
Relation_maps: id, movie_id, related_movie_id, relation_id
Relations: id, relation_text
同樣的,替代2,除非反向關係將通過視圖代碼中的條件語句顯示。如果這樣更好,我應該真的分割關係文本還是將它合併到relation_maps表中?
是否有在性能和最佳實踐方面沒有更好的方法?提前致謝。
我並沒有真正明白你的意思。爲什麼關係表與僅有電影名稱的電影表相同?訂單用於什麼? – deka
@deka,你將要命名關係,並且不能使用自動增量在細節表中創建新的id,但可以在關係表中使用自動增量。此外,「序列」列允許您按順序列出電影。 –
哦,我現在明白了。反向關係如何?例如在你的情況下,如果movie_id 40是星球大戰,而movie_id 50是星球大戰2?我想,如果我這樣使用它,會有太多的關係細節和冗餘。 – deka