Самостоятельная ссылка внешнего ключа для ограничения вложенности (SQL, Sequelize) - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь создать таблицу, например, которая состоит из этой структуры:

<Comments>
id(PK, int)    comment_id(FK, int)    body(text)
1              null                   "This is a comment"
2              1                      "This is a nested comment"
3              2                      "This is a nested nested comment"

Приведенный выше пример представляет преимущества использования таблиц с самоссылкой, которые я хочу устранить на определенном уровне.

Комментарий id: 3 ссылается на comment_id=2 комментарий, а id=2 ссылается comment_id=1.

Я хочу ограничить эту вложенную ссылку одним уровнем с возможностьюдобавить конкретное ограничение, которое проверяет и устанавливает значение, равное первому уровню гнезда.

Чтобы сделать его более понятным, id=3 в этой точке вместо ссылки comment_id=2 должен ссылаться на comment_id=1и выглядят так:

<Comments>
id(PK, int)    comment_id(FK, int)    body(text)
1              null                   "This is a comment"
2              1                      "This is a nested comment"
3              1                      "This is a nested nested comment"

Я хочу, чтобы бэкэнд был как можно менее занят при обработке таких ситуаций, и просто предоставив ссылку на comment_id=2 в моем запросе на создание, я бы хотел, чтобыавтоматически указывает на id=2 ссылку comment_id=1 вместо comment_id=2

Кроме меня, я использую Sequelize в NodeJS и могу ограничивать данныев серверных маршрутах я хотел бы понять, как этого можно добиться с помощью sql (или sequelize), чтобы сохранить целостность потока данных линейным.

1 Ответ

0 голосов
/ 21 октября 2018

Вы делаете это, имея другой стол.Если ваши комментарии ссылаются на что-то , то вы можете использовать эту таблицу.В противном случае:

create table comments (
    commentId int primary key,
    . . .
);

create table commentLines (
    commentLineId int primary key,
    commentId int references comments(commentId),
    comment varchar(255)
);
...