将列值约束为同一个表中不同列的值?

时间:2011-05-11 11:06:44

标签: mysql sql

我正在使用数据库为网站创建树视图。我将创建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 

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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上有点生疏,所以我的语法可能需要一些工作,但这就是我接近它的方法。这种方式更加灵活。