Создайте три таблицы с одинаковым первичным ключом и именем автоинкремента - PullRequest
0 голосов
/ 14 октября 2018

Не могу найти хороший ответ для этого онлайн.Мне нужно создать три таблицы в качестве примера ниже, родитель с идентификатором автоинкремента, который затем свяжется с двумя дочерними таблицами (Subject и Comment) с одинаковым точным идентификатором и вернется в каскад, если этот родительский идентификатор будет удален.
Любые идеи о том, как решить?
Я гуглил и очень запутался в том, как решить эту проблему.У меня приличный опыт работы с SQL, но не с созданием таблиц и связей.

CREATE TABLE Parent
(
    ParentID INT NOT NULL IDENTITY PRIMARY KEY,
    Email VARCHAR(50) NOT NULL,...
)

CREATE TABLE Subject
(
    ParentID INT NOT NULL PRIMARY KEY,
    Subject
)

CREATE TABLE Comment
(
    ParentID INT NOT NULL PRIMARY KEY,
    Comment VARCHAR(100)
)

1 Ответ

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

Используйте отношение 1 к 1 с on delete cascade:

CREATE TABLE Parent(
    ParentID INT NOT NULL IDENTITY PRIMARY KEY,
    Email VARCHAR(50) NOT NULL,...
)

CREATE TABLE Subject(
    ParentID INT NOT NULL PRIMARY KEY,
    Subject,
    CONSTRAINT fk_SubjectParentId FOREIGN KEY (ParentID)
    REFERENCES Parent (ParentID) ON DELETE CASCADE
)

CREATE TABLE Comment(
    ParentID INT NOT NULL PRIMARY KEY,
    Comment VARCHAR(100),
    CONSTRAINT fk_CommentParentId FOREIGN KEY (ParentID)
    REFERENCES Parent (ParentID) ON DELETE CASCADE
)

Это называется отношением 1 к 1, поскольку оба конца внешнего ключа уникальны в своей таблице.

Хотя я должен согласиться с комментарием Митча Уитя, каскадное удаление следует использовать с осторожностью.указав каскадное удаление, вы указываете ядру базы данных удалять связанные записи всякий раз, когда удаляется родительская запись.Отсутствие этой опции каскадного удаления просто выдаст ошибку, если вы попытаетесь удалить запись, на которую ссылается другая таблица.Это заставляет вас, как разработчика, задуматься о побочных эффектах удаления строк из родительской таблицы и в основном действует как «Вы уверены, что хотите удалить?»Защита от нежелательных удалений.

...