我目前正在構建一個使用PHP和MySQL發佈故事的小型Web應用程序。每個故事可以是一篇文章(有很多字段和數據),只是一個超鏈接/ url,只是一個圖像,或者是具有特定屬性的可下載文件(再次有很多字段)。具有不同內容的連續表
我的問題與找到系統的最佳數據庫佈局有關。我曾考慮過3種不同的解決方案,這些解決方案可能會也可能不起作用(字段僅僅是示例,不會因數據是否應存儲在數據庫中而受到影響):
1)爲每個鍵入並且只是UNION他們。 E.g:
文章
id | date | title | author | preview | last_edited | category | content
超鏈接
id | date | title | author | url
圖片
id | date | title | author | thumbnail | fullimg
文件
id | date | title | author | filetype | filename | filecontent
是否有可能創建一個SQL語句,以這種方式將每個字段添加到來自各個表的行中,並將各個行的「標記」類型取決於哪個表的來源?或者我必須解決的只是常見的領域(3-4字段將是相同的每個表),併爲每個行的單獨查找?
2)根據類型製作某種引用正確表和行的索引表?
索引
id | type | title | date | referenceid
- >文章,超鏈接,圖片或文件取決於「類型」字段。
使用外鍵時,這種方式有可能以某種方式嗎?我懷疑沒有,但是不確定你能在MySQL中做什麼,不能做什麼。
3)所有類型的所有字段在同一個表中,只是使特定字段爲空(我不太喜歡這個解決方案,因爲它看起來凌亂)。
任何想法?
我懷疑我不能成爲第一個遇到引用不同實體類型/字段的問題,這取決於某種類型。
想法是高度讚賞。
這樣解決它的性能損失會是什麼?我對找出可能的解決方案的不同優點和缺點非常感興趣。 – agnsaft 2012-07-06 14:43:46
聯盟本身就很慢。對於SQL Server,UNION ALL要快得多 - 不確定mySQL。但是與其他數據庫一樣,性能取決於太多隔離因素。除非你處理數據庫,否則我不希望這個查詢成爲瓶頸。 – Bill 2012-07-06 16:01:46