Ограничить значение столбца значением другого столбца в той же таблице? - PullRequest
0 голосов
/ 11 мая 2011

Я создаю древовидное представление для веб-сайта, используя базы данных.Я создам 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 голосов
/ 11 мая 2011

Я бы создал отдельную таблицу для работы со связями, поскольку файл может легко существовать в двух папках (например, псевдонимы).В этой схеме вы могли бы упростить вещи с помощью таблицы 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, так что мой синтаксис может потребовать некоторой работы, но это то, как я бы подошел к нему.Это гораздо более гибкий способ.

0 голосов
/ 11 мая 2011
create table folder (
  folder_id int primary key,
  folder_name varchar not null,
  folder_parent int references folder(folder_id)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...