Может кто-нибудь объяснить это утверждение (внешний ключ) таблицы - PullRequest
0 голосов
/ 23 января 2020
CREATE TABLE genres 
(
    genre_id  INT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
    genre     VARCHAR(255) N[enter image description here][1]OT NULL, 
    parent_id INT NULL, 

    -- Will be thankful to you for explaining the 3 lines below
    PRIMARY KEY (genre_id),

    CONSTRAINT fk_parent 
        FOREIGN KEY(parent_id) REFERENCES genres(genre_id)
);

Ответы [ 2 ]

0 голосов
/ 23 января 2020
0 голосов
/ 23 января 2020

PRIMARY KEY (genre_id) - означает, что не более одной строки в таблице GENRES может иметь заданное значение c. Другими словами, для каждой строки в таблице значение в столбце GENRE_ID будет уникальным. Кроме того, значение в столбце не может быть нулевым, и это значение служит для уникальной идентификации строки без необходимости какого-либо другого значения для идентификации строки. DDL показывает, что база данных будет генерировать значение для столбца GENRE_ID по умолчанию.

«CONSTRAINT fk_parent FOREIGN KEY (parent_id) REFERENCES genres (genre_id))» означает, что менеджер базы данных будет применять это, если столбец PARENT_ID не равен NULL, тогда значение в этом столбце должно быть существующим значением в строке в таблице GENRES. Другой способ думать об этом состоит в том, что менеджер базы данных должен поддерживать отношения родитель-ребенок, поэтому жанр может иметь поджанры (то есть жанр может иметь дочерние жанры). Поэтому менеджер баз данных не позволит вам указать, что определенный жанр является поджанром несуществующего родительского жанра.

Менеджер баз данных может также принудительно установить связь в течение определенного периода времени, например, он может предотвратить действие удаления или обновления, если при этом удалении появятся потерянные строки (т. Е. Дочерние строки без родительской строки), или он может установить такие значения parent_id равны нулю, в зависимости от DDL и Db2-версии / платформы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...