2011-05-11 67 views
0

我使用數據庫爲網站創建樹視圖。我將創建2個表格,我們稱之爲「文件夾」和「文件」。一個文件夾可以包含多個文件夾和文件,並且文件將充當葉節點 - 這意味着如果您不熟悉該術語,它們就是樹中的「死衚衕」。將列值限制爲同一個表內不同列的值?

的文件表將包含列:

Folder_id, Folder_name, Folder_parent 

文件將包含:

File_id, File_name, File_parent 

顯然File_parent將引用folder_id,從而創造一個外鍵,但如何讓Folder_parent參考Folder_id?

例子:

FOLDER_NAME | FOLDER_ID | FOLDER_PARENT 
root    1    null 
Cars    2     1 
Planes    3     1 
BMW    4     2 
+0

我認爲你錯過了這一點,file_parent已經指向folder_id,所以當你看一個文件夾時,你選擇file_id其中folder_name ='example' – 2011-05-11 11:17:15

+0

@Abe當創建一個文件很容易確保它不有一個不存在的父級,因爲file_parent引用了folder_id。但是在創建文件夾時,不存在類似的故障安全。我可以在插入之前檢查id是否有效(從folder_id = parameter選擇* from文件夾,如果找到任何文件),但是沒有更多的.. table side解決方案嗎? – 2011-05-11 12:17:48

回答

0
create table folder (
    folder_id int primary key, 
    folder_name varchar not null, 
    folder_parent int references folder(folder_id) 
) 
0

我會做一個獨立的表來處理的關係,因爲一個文件可以在兩個文件夾(別名覺得)很容易地存在。在這個模式中,你可以簡化事情只是一個node表和relationships(或edges,如果你熟悉圖論)表:

CREATE TABLE nodes (
    node_id int primary key, 
    node_name varchar not null, 
    node_type enum('folder','file') 
) 

CREATE TABLE edges (
    child_node_id int primary key, 
    parent_node_id int, 
    unique(child_node_id, parent_node_id) 
) 

我對我的SQL有點生疏,所以我語法可能需要一些工作,但這就是我如何處理它。這種方式更加靈活。

相關問題