2009-06-17 34 views
2

比方說,我有可能是浪漫,小說或神祕的書籍。我有2個現實的選項來存儲這些數據。一種是在我的書籍表中有一個類型列,它是一個值爲「浪漫」,「小說」或「神祕」的字符串。另一個是創建一個book_types表並將類型存儲在那裏。然後我的書會有一個引用book_types表的type_id外鍵。如果我有多種類型的對象,何時object.type應該是一個字符串,什麼時候應該是一個外鍵?

我的問題是我該如何挑選哪一個最好?我已經看到在Restful認證Rails插件中使用的字符串方法,其中包含有關用戶狀態的信息 - 「非活動」,「活動」,「待處理」...

使用查找表方法考慮到我一直在查詢這些信息?

謝謝!

回答

3

外鍵的方法有更好的表現。字符串比較會減慢速度。比較數字要快得多。

如果您想要加快查詢速度,請在您用來引用外鍵的列上添加一個索引。與主鍵不同,索引不會自動爲外鍵創建。

1

如果從來沒有更多的信息要存儲的東西,字符串通常很好(雖然這是一個非瞬態值,所以它不是正常形式)。

然而,這似乎是一個表的好選擇,所以你可能想要做更多的類別,所以它應該是一個參考表,imo。

0

我會用fk。 重複的信息較少。

編輯: Betther解決方案: MySQL代碼:

CREATE TABLE books 
(
    id int AUTO_INCREMENT   not null, 
    book_type enum('romance', 'fiction', 'mystery')  not null, 
    .... 
); 
+0

並非所有數據庫都具有枚舉類型。用這種方式添加新類別很容易嗎? – UncleO 2009-06-17 06:43:10

1

在大多數情況下,一個外鍵一個單獨的表的方法是最好的 - 優點:

  • 附表給你一個 擴展的方式來驗證該條目。把一個硬編碼檢查約束表定義 則需要ALTER TABLE如果你需要改變某些原因,類型的文本(例如,「浪漫」添加 新型

  • - >「女性小說「對於一個蹩腳的例子),你只會對查找表進行輕量級更新。

  • 您可以想象,還有沒有條目的類型,而單獨的表讓您使用外部聯接將類型包含在SQL結果集中。

  • 從界面的角度來看,單獨的表格可讓您輕鬆生成不需要在UI中進行硬編碼的類型下拉列表。

至於性能也越高,與在FK正確索引的RDBMS引擎將表現良好 - 連接是什麼的RDBMS是專爲。

相關問題