Mysql

需要有關“標籤”表設計的建議

  • May 25, 2012

我的網站有不同的內容類型。所有內容類型都應該是可標記的(除非在模型中指定,無論如何)。我可以為我的設計想到 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”,並實際測試哪個表現更好?

引用自:https://dba.stackexchange.com/questions/18398