Учебники

PostgreSQL — ОГРАНИЧЕНИЯ

Ограничения — это правила, применяемые к столбцам данных в таблице. Они используются для предотвращения ввода неверных данных в базу данных. Это обеспечивает точность и достоверность данных в базе данных.

Ограничения могут быть на уровне столбца или таблицы. Ограничения уровня столбца применяются только к одному столбцу, тогда как ограничения уровня таблицы применяются ко всей таблице. Определение типа данных для столбца само по себе является ограничением. Например, столбец типа DATE ограничивает столбец допустимыми датами.

Ниже приведены часто используемые ограничения, доступные в PostgreSQL.

  • NOT NULL Ограничение — Гарантирует, что столбец не может иметь значение NULL.

  • UNIQUE Constraint — гарантирует, что все значения в столбце разные.

  • PRIMARY Key — уникально идентифицирует каждую строку / запись в таблице базы данных.

  • Ключ FOREIGN — Ограничивает данные на основе столбцов в других таблицах.

  • Ограничение CHECK — ограничение CHECK гарантирует, что все значения в столбце удовлетворяют определенным условиям.

  • Ограничение EXCLUSION — ограничение EXCLUDE гарантирует, что, если любые две строки сравниваются в указанных столбцах или выражениях с использованием указанных операторов, не все эти сравнения возвращают TRUE.

NOT NULL Ограничение — Гарантирует, что столбец не может иметь значение NULL.

UNIQUE Constraint — гарантирует, что все значения в столбце разные.

PRIMARY Key — уникально идентифицирует каждую строку / запись в таблице базы данных.

Ключ FOREIGN — Ограничивает данные на основе столбцов в других таблицах.

Ограничение CHECK — ограничение CHECK гарантирует, что все значения в столбце удовлетворяют определенным условиям.

Ограничение EXCLUSION — ограничение EXCLUDE гарантирует, что, если любые две строки сравниваются в указанных столбцах или выражениях с использованием указанных операторов, не все эти сравнения возвращают TRUE.

NOT NULL Ограничение

По умолчанию столбец может содержать значения NULL. Если вы не хотите, чтобы столбец имел значение NULL, вам необходимо определить такое ограничение для этого столбца, указав, что NULL теперь не разрешен для этого столбца. Ограничение NOT NULL всегда записывается как ограничение столбца.

NULL — это не то же самое, что отсутствие данных; скорее это представляет неизвестные данные.

пример

Например, следующий оператор PostgreSQL создает новую таблицу с именем COMPANY1 и добавляет пять столбцов, три из которых, ID и NAME и AGE, указывают, что они не должны принимать значения NULL.

CREATE TABLE COMPANY1(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Уникальное ограничение

Уникальное ограничение не позволяет двум записям иметь одинаковые значения в определенном столбце. Например, в таблице COMPANY вы можете запретить двум или более людям одинаковый возраст.

пример

Например, следующий оператор PostgreSQL создает новую таблицу с именем COMPANY3 и добавляет пять столбцов. Здесь столбец AGE имеет значение UNIQUE, поэтому вы не можете иметь две записи одного возраста —

CREATE TABLE COMPANY3(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL UNIQUE,
   ADDRESS        CHAR(50),
   SALARY         REAL    DEFAULT 50000.00
);

ПЕРВИЧНЫЙ КЛЮЧ Ограничение

Ограничение PRIMARY KEY однозначно идентифицирует каждую запись в таблице базы данных. Может быть больше УНИКАЛЬНЫХ столбцов, но только один первичный ключ в таблице. Первичные ключи важны при разработке таблиц базы данных. Первичные ключи — это уникальные идентификаторы.

Мы используем их для ссылки на строки таблицы. Первичные ключи становятся внешними ключами в других таблицах при создании связей между таблицами. Из-за «давнего надзора за кодированием» первичные ключи могут иметь значение NULL в SQLite. Это не относится к другим базам данных

Первичный ключ — это поле в таблице, которое однозначно идентифицирует каждую строку / запись в таблице базы данных. Первичные ключи должны содержать уникальные значения. Столбец первичного ключа не может иметь значения NULL.

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

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

пример

Вы уже видели различные примеры выше, где мы создали таблицу COMAPNY4 с ID в качестве первичного ключа —

CREATE TABLE COMPANY4(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

ЗАРУБЕЖНЫЙ КЛЮЧ

Ограничение внешнего ключа указывает, что значения в столбце (или группе столбцов) должны соответствовать значениям, появляющимся в некоторой строке другой таблицы. Мы говорим, что это поддерживает ссылочную целостность между двумя связанными таблицами. Они называются внешними ключами, потому что ограничения являются внешними; то есть вне стола. Внешние ключи иногда называют ссылочными ключами.

пример

Например, следующий оператор PostgreSQL создает новую таблицу с именем COMPANY5 и добавляет пять столбцов.

CREATE TABLE COMPANY6(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Например, следующий оператор PostgreSQL создает новую таблицу с именем DEPARTMENT1, которая добавляет три столбца. Столбец EMP_ID является внешним ключом и ссылается на поле идентификатора таблицы COMPANY6.

CREATE TABLE DEPARTMENT1(
   ID INT PRIMARY KEY      NOT NULL,
   DEPT           CHAR(50) NOT NULL,
   EMP_ID         INT      references COMPANY6(ID)
);

ПРОВЕРЬТЕ Ограничение

Ограничение CHECK позволяет условию проверять значение, вводимое в запись. Если условие оценивается как ложное, запись нарушает ограничение и не заносится в таблицу.

пример

Например, следующий оператор PostgreSQL создает новую таблицу с именем COMPANY5 и добавляет пять столбцов. Здесь мы добавляем столбец CHECK with SALARY, чтобы у вас не было SALARY в качестве нуля.

CREATE TABLE COMPANY5(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL    CHECK(SALARY > 0)
);

ИСКЛЮЧЕНИЕ Ограничение

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

пример

Например, следующий оператор PostgreSQL создает новую таблицу с именем COMPANY7 и добавляет пять столбцов. Здесь мы добавляем ограничение EXCLUDE —

CREATE TABLE COMPANY7(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT,
   AGE            INT  ,
   ADDRESS        CHAR(50),
   SALARY         REAL,
   EXCLUDE USING gist
   (NAME WITH =,
   AGE WITH <>)
);

Здесь USING gist — это тип индекса, который нужно создать и использовать для принудительного применения.

Вам необходимо выполнить команду CREATE EXTENSION btree_gist , один раз для каждой базы данных. Это установит расширение btree_gist, которое определяет ограничения исключения для простых скалярных типов данных.

Поскольку мы установили, что возраст должен быть одинаковым, давайте посмотрим на это, вставив записи в таблицу:

INSERT INTO COMPANY7 VALUES(1, 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY7 VALUES(2, 'Paul', 32, 'Texas', 20000.00 );
INSERT INTO COMPANY7 VALUES(3, 'Allen', 42, 'California', 20000.00 );

Для первых двух операторов INSERT записи добавляются в таблицу COMPANY7. Для третьего оператора INSERT отображается следующая ошибка:

ERROR:  duplicate key value violates unique constraint "company7_pkey"
DETAIL:  Key (id)=(3) already exists.

Отбрасывание ограничений

Чтобы удалить ограничение, вам нужно знать его имя. Если имя известно, его легко отбросить. Иначе, вам нужно узнать имя, сгенерированное системой. Здесь может помочь команда psql \ d имя таблицы. Общий синтаксис —