2010-10-22 152 views
1

我有表文件夾,其中列parent_id引用id如果該文件夾有父,如果不是,則parent_id爲null。這是好的解決方案,或者我需要額外的表格用於此連接或其他解決方案?外鍵可以爲空,如果可以的話,這個解決方案會有更大的時間執行嗎?外鍵null - 性能下降

table folder(
    id int primary key,   //primary key in my table 
    parent_id int references id, //foreign key on id column in same table 
.... 
) 

回答

2

您可以擁有NULL外鍵。沒問題。我不會爲沒有父文件夾(根文件夾)的文件夾添加額外的表。它會讓你的設計更加複雜,沒有任何好處。

+0

我認爲額外的表像表分機(id_column,id_folder,parent_id_folder)。列有很多空NULL時是否會有性能下降? – Jane 2010-10-22 17:43:10

+0

你不應該有巨大的性能下降。你可以添加一個索引的外鍵,如果這有助於某些查詢... – 2010-10-22 17:46:23

+0

謝謝,它有幫助! – Jane 2010-10-22 17:47:42

2

是,一個外鍵,可向接受NULL值:如果一個外鍵設置爲接受NULL值與否並不影響

CREATE TABLE folders (
    id   int NOT NULL PRIMARY KEY, 
    parent_id int NULL, 
    FOREIGN KEY (parent_id) REFERENCES folders (id) 
) ENGINE=InnoDB; 
Query OK, 0 rows affected (0.06 sec) 

INSERT INTO folders VALUES (1, NULL); 
Query OK, 1 row affected (0.00 sec) 

執行時間。


UPDATE:進一步下面評論:

請記住,B樹索引是最有效的高基數數據(即有許多可能的值列,其中在列中的數據是獨特的或幾乎獨一無二的)。如果您將有許多值(或任何其他重複的值),查詢優化器可能會選擇不使用索引來篩選結果集的記錄,因爲它不會更快。但是,這個問題與列是外鍵還是不外鍵無關。

+0

但在查詢中,如果我的列有很多空NULL?或者創建id = 0的假文件夾根目錄? – Jane 2010-10-22 17:46:28