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

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

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

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

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

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

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

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

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

  • EXCLUSION Constraint - Ограничение 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
);

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

Ограничение UNIQUE не позволяет двум записям иметь одинаковые значения в определенном столбце. Например, в таблице «КОМПАНИЯ» вы можете запретить двум или более людям иметь одинаковый возраст.

пример

Например, следующий оператор 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

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

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

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

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

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

пример

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

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

Ограничение FOREIGN KEY

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

пример

Например, следующий оператор 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 является внешним ключом и ссылается на поле 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 и добавляет пять столбцов. Здесь мы добавляем ПРОВЕРКУ с столбцом ЗАРПЛАТА, чтобы вы не могли иметь ЗПЛАТУ как Ноль.

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, 'Paul', 42, 'California', 20000.00 );

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

ERROR:  conflicting key value violates exclusion constraint "company7_name_age_excl"
DETAIL:  Key (name, age)=(Paul, 42) conflicts with existing key (name, age)=(Paul, 32).

Удаление ограничений

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

ALTER TABLE table_name DROP CONSTRAINT some_name;