我工作的一個項目,我有以下(編輯)的表結構:(MySQL的)數據庫設計用於標記多個源(MySQL的)
Blog
id
title
description
Episode
id
title
description
Tag
id
text
的想法是,該標籤可應用於任何博客或劇集(以及其他類型的資源),如果用戶不存在於標籤表中,則可以由用戶創建新標籤。
標籤的用途是用戶將能夠搜索網站,結果將搜索網站上的所有類型的材料。另外,在每篇博客文章/劇集說明的底部,它都會有一個該項目的標籤列表。
我想過了很多關於搜索機制,但我想它會在OR搜索和AND搜索之間靈活,如果這對選擇有任何影響,並且可能允許用戶篩選特定類型的結果的來源。
本來我是打算創建多個標籤映射表:
BlogTag
id
tag_id
blog_id
EpisodeTag
id
episode_id
tag_id
但現在我不知道如果我將與更好:
TaggedStuff
id
source_type
source_id
tag_id
凡SOURCE_TYPE將是一個整數,關係到能否它是一個Episode,Blog或其他一些我沒有包含在上述結構中的類型,並且source_id將作爲該特定表中的參考。
我只是想知道最佳結構是什麼,這是第一選擇還是第二選擇?
我有一種感覺,這是我走的路。以此爲基礎開始,因爲它是「正確的」標準化設計,那麼如果/當涉及到提高系統效率時,我可以開始尋找加快速度的方法。 – 2011-06-08 16:53:15
是的,正如我在別處的另一個答案中寫的,有三個主要概念如何爲泛化創建表。但最常見的是擁有泛型類型和所有子類型的表格。它有許多優點,但也有一些缺點,比如更多的JOIN(可能會減慢速度),當你僅僅從泛化中知道主鍵時,獲得整個實體會有點棘手。 ( - >我必須加入什麼表格?Episode或Blog?)另一種方式很容易,但這就是你經常做的事情。 – 2011-06-08 17:07:11