Страницы

Поиск по вопросам

суббота, 7 марта 2020 г.

Что означает CONSTRAINT в данном контексте?

#sql #postgresql #constraints


Есть 2 таблицы :

CREATE TABLE company(
    id integer NOT NULL,
    name character varying,
    CONSTRAINT company_pkey PRIMARY KEY (id)
);

CREATE TABLE person(
    id integer NOT NULL,
    name character varying,
    company_id integer,
    CONSTRAINT person_pkey PRIMARY KEY (id)
);


Скрипт писал не я, и пытаюсь понять логику человека который это делал. В чем может
быть смысл этого ограничения CONSTRAINT person_pkey PRIMARY KEY (id)? И во втором случае
аналогично. Это ограничение что id может быть только первичным ключем ? А зачем это
может быть нужно? Тем более еще и именовать это ограничение. Помогите пожалуйста разобраться
зачем делать такой CONSTRAINT?
    


Ответы

Ответ 1



Определение CONSTRAINT company_pkey PRIMARY KEY (id) эквивалентно определению PRIMARY KEY (id) и означает, что id является первичным ключом таблицы. Т.к. в данном случае первичный ключ состоит из одного столбца, то его можно было бы указать на уровне поля: CREATE TABLE company( id integer PRIMARY KEY, name character varying ); Возможность определения ключа на уровне таблицы полезна если ключ — составной PRIMARY KEY (id, name) В первом случае у ограничения задано имя. Это имя будет выводиться в сообщениях об ошибках. Также по имени можно это ограничение удалить. В случае если имя ограничения не задано явно, оно будет сгенерировано СУБД. Это сказано в документации: CONSTRAINT constraint_name An optional name for a column or table constraint. If the constraint is violated, the constraint name is present in error messages, so constraint names like col must be positive can be used to communicate helpful constraint information to client applications. (Double-quotes are needed to specify constraint names that contain spaces.) If a constraint name is not specified, the system generates a name.

Комментариев нет:

Отправить комментарий