Mysql
需要有關“標籤”表設計的建議
我的網站有不同的內容類型。所有內容類型都應該是可標記的(除非在模型中指定,無論如何)。我可以為我的設計想到 2 個選項:
2 個表選項:1 個標籤表(+另一個,它的 i18n 內容)加上 1 個關聯表(content_type,content_id,tag_id)。
優點:
- 創作速度更快
- 標籤的模型部分相同(因此繼承模型)
- 對於控制器來說也是一樣的。
潛在的缺點:
- 性能會不會很差?
- 桌子很快會太大嗎?
- 如何查詢標籤雲(與所有分組內容相關)?
許多表選項:1個標籤表,每種內容類型的關聯表。
優點:
- 桌子會更短
缺點:
- 必須自定義每個模型或編寫邏輯/足跡來查詢正確的表
- 醜陋的長請求/php程式碼加入所有內容類型的標籤
附加事實:
- 前端將有記憶體,標籤由內容編寫者設置。
- 有 10 種內容類型。
- 通常不會有新類型的內容。
- 內容數約為 500 ,將在 3 年內翻一番。
- MySQL 引擎 InnoDB。
- 使用 yii 框架建構。
- 將查詢已定義內容類型的標籤
- 將查詢任何類型內容的標籤(例如,一個大標籤雲)。
所以我的想法是使用第一個設計(2張桌子)。但我不是數據庫專家……你會推薦第二種選擇嗎?為什麼 ?
我會選擇選項 1(兩張桌子)。
如果您只計劃擁有 1000 個內容項(並且在 3 年內,而不是現在),我認為您不會遇到很多性能問題,除非每個內容項都用十幾個標籤進行標記,其中大多數是該項目獨有的。即便如此,我認為您不會看到太多性能問題。如果您對每種內容類型都有 1 個標籤表,然後您決定稍後添加/刪除/更改內容類型,它還可以簡化您的結構。
如果您真的不確定,您是否有時間/資源來建構兩個範例數據庫,一個基於每個結構,用您認為實際的負載填充它們(您可以編寫腳本/程序來生成和插入測試數據,對吧?帶有“無聊”的標籤和內容,例如“content_1..content_2000 和 tag_1…tag_5000”,並實際測試哪個表現更好?