我有一個網站,我開發的結構有點像stackoverflow。我在數據庫中有一個Posts
表和一個PostImages
表。該PostImages
表看起來像這樣:將表映射到許多其他表?
PostImageId PK
PostId FK
Uri
MimeType
這樣的帖子可以有很多與之相關聯的圖像。
我現在有一個網站上的其他地方應該有圖片的要求:Users
應該能夠在個人資料中有圖片,Categories
應該能有圖像,Addresses
應該能有圖片。
在我的數據庫中似乎最好只有一個Images
表。我應該如何建模?我可以有一個表是這樣的:
ImageId PK
PostId FK
CategoryId FK
AddressId FK
UserId FK
Uri
MimeType
我能有一個images
表,然後額外的表爲每種對象:
PostImageId PK FK
PostId FK
CategoryImageId PK FK
CategoryId FK
(每個項目的PK也FK來自Images
表的圖像)
還有一些其他的策略:例如,我可以有一個___Images
表爲每種類型,並沒有共享Images
表。我可以爲每個映射表建立一個多對多的映射表,也許還有一些我沒有想到的其他解決方案。
什麼是最好的?我不太瞭解數據庫設計 - 這將是最靈活和最容易使用的?
圖像是否可用於多個來源,如帖子和用戶?如果是這樣,可能最好的解決方案是添加一個額外的列到fk到圖像表的每個表(如果沒有圖像存在記錄,則爲null)。 – Emyl
@Emyl一個帖子或一個用戶可以有多個圖像,所以把FK放在'Posts'或'Users'表中並不適用於我。 – Oliver
對不起,沒有注意到這個要求。鑑於此,我個人認爲您應該爲每個對象選擇一個額外的表格。它會花費你額外的加入,但它更加靈活。作爲一個例子,每當需要一個新的對象時,它不需要ALTER TABLE。 – Emyl