BI Consult Desktop Logo BI Consult Mobile Logo
  • Russian BI Исследование российских bi
  • Перейти на Fine BI
  • Контакты
  • +7 812 334-08-01
    +7 499 608-13-06
  • Отправить сообщение
  • Главная
  • Продукты Эксперт-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Сельское хозяйство
    • Энергетика
    • FMCG
    • Девелоперы
    • Маркетплейсы
    • Пищевая промышленность
    • Фармацевтика
    • Построение Data Platform
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и FP&A
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • IBP
    • ИТ (CIO)
    • Закупки
  • Платформы
    • Системы бизнес-анализа (BI)
    • Интегрированное бизнес-планирование (IBP)
    • Хранилища данных (DWH / Lakehouse)
    • Каталоги данных (Data Catalog)
    • Системы ETL и ELT
    • AI / Исскуственный интеллект
    • Шина данных (ESB)
    • Система управления мастер-данными (MDM)
    • Семантический слой
  • Услуги
    • Переход на отечественные BI и DWH системы
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений и DWH
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Greenplum
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt (Data Build Tool)
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

BI

  • FineBI
  • FineReport
  • FineDataLink
  • FineChatBI (FineAI)
  • Коннекторы данных из 1С в BI
  • Airflow / Nifi
  • Visiology
  • PIX BI
  • Modus BI
  • Yandex.DataLens
  • Open-source BI: Superset/Metabase
  • Luxms BI
  • AW BI + Alpha BI
  • FlyBI + Форсайт. Аналитическая Платформа
  • Loginom
  • Триафлай
  • AI / Исскуственный интеллект
  • Optimacros
  • Навигатор BI
  • Семантический слой

СУБД

  • Arenadata
  • ClickHouse
  • Greenplum
  • Postgres Professional
  • TData

Другое

  • Построение Data Platform
    • Аналитическое хранилище данных
    • Data Lake и Data Engineering
    • Подробнее про Data Lake
    • Внедрение Lakehouse
      • Apache Doris
      • StarRocks
      • Trino
    • Миграция витрин из пропиетарных DWH на новый стек
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Курсы по системам бизнес-анализа и методологии » Учебный курс по PostgreSQL » Руководство по PostgreSQL » Ограничения в PostgreSQL

Ограничения в PostgreSQL

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

Ограничения бывают на уровне столбца и на уровне таблицы. Они помогают базе данных автоматически контролировать качество данных, связи между таблицами и бизнес-правила еще на этапе вставки или изменения строк. В статье разберем основные ограничения PostgreSQL: NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK и EXCLUDE, а также покажем примеры их использования.

Что внутри:

  • что такое ограничения в PostgreSQL;
  • ограничения на уровне столбца и таблицы;
  • NOT NULL и запрет пустых значений;
  • UNIQUE и уникальность значений;
  • PRIMARY KEY как идентификатор строки;
  • FOREIGN KEY и ссылочная целостность;
  • CHECK и проверка условий;
  • EXCLUDE и исключающие ограничения;
  • примеры CREATE TABLE с constraints;
  • зачем ограничения нужны для надежности данных.

 

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

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

Самые распространенные ограничения, доступные в PostgreSQL:

  • NOT NULL – столбец не может содержать нулевые значения (NULL);
  • UNIQUE – все значения в столбце должны быть разные;
  • PRIMARY Key − идентифицирует каждую строку/запись в таблице базы данных;
  • FOREIGN Key − ограничивает данные на основе столбцов в других таблицах;
  • CHECK – все значения в столбце должны удовлетворять определенным условиям;
  • EXCLUSION − ограничение EXCLUDE гарантирует, что при сравнении любых двух строк в указанном столбце (столбцах) или выражении (выражениях) с использованием указанного оператора (операторов) не все эти сравнения вернут значение TRUE.

 

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

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

NULL – это не то же самое, что отсутствие данных; скорее, речь идет о неизвестных данных.

 

Пример

Например, команда, приведенная ниже, создаст новую таблицу под названием COMPANY1 и добавит пять столбцов, три из которых, ID, имя и возраст не смогут принять значения NULL:

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

 

Ограничение UNIQUE

Ограничение UNIQUE помогает избежать повторения значений в определенном столбце. Например, возможно, Вы не хотите, чтобы в таблице 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

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

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

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

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

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

 

Пример

Выше Вы уже видели несколько пример создания новых таблиц, в данном случае COMРАNY4 содержит столбец ID в качестве первичного ключа:

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

 

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

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

 

Пример

Создадим таблицу COMPANY6 и добавим пять столбцов:

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

 

Создадим еще оду таблицу  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

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

Пример

Создадим новую таблицу COMPANY5 и добавим пять столбцов. Добавим ограничение CHECK для столбца SALARY (ЗАРПЛАТА), таким образом, Вы не сможете добавить зарплату равную 0.

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)
);

 

Ограничение EXCLUSION

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

 

Пример

Создадим таблицу 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 table name может быть полезной. Базовый синтаксис выглядит следующим образом:

ALTER TABLE table_name DROP CONSTRAINT some_name;

 

FAQ

Вопрос: Что такое constraint в PostgreSQL?

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

 

Вопрос: Чем NOT NULL отличается от CHECK?

Ответ: NOT NULL запрещает хранить NULL в столбце. CHECK позволяет задать произвольное логическое условие, которому должны соответствовать значения строки или столбца.

 

Вопрос: Чем UNIQUE отличается от PRIMARY KEY?

Ответ: UNIQUE требует уникальности значений в столбце или наборе столбцов. PRIMARY KEY также обеспечивает уникальность, но дополнительно идентифицирует строку таблицы и не допускает NULL.

 

Вопрос: Зачем нужен FOREIGN KEY?

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

 

Вопрос: Что такое EXCLUDE constraint?

Ответ: EXCLUDE constraint запрещает одновременное выполнение заданного сравнения для двух строк. Его часто используют для предотвращения пересекающихся диапазонов, например интервалов времени.

 

  • PostgreSQL: типы данных
  • PostgreSQL: команда TRUNCATE TABLE
  • PostgreSQL: функции и операции даты/времени
  • Функции для работы со строками PostgreSQL
  • DBeaver: создание подключения

 

 

Узнать стоимость решенияЗапросить видео презентацию

← Предыдущая статья
PostgreSQL – ключевое слово DISTINCT
Следующая статья →
PostgreSQL - операторы JOINS
Запросить видео презентацию Запросить доступ к демо стенду online Узнать стоимость лицензий

Задать вопрос

loading...

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

Клиенты
  • Банк "Санкт-Петербург" - это универсальный коммерческий банк, предоставляющий полный спектр финансовых услуг для частных и корпоративных клиентов. Банк основан в 1990 году и имеет генеральную лицензию Банка России на осуществление банковских операций. Сеть банка включает более 170 офисов и отделений, а также свыше 1000 банкоматов и терминалов в Санкт-Петербурге, Москве и других регионах.

  • Розничный и интернет-магазин 12 Storeez один из лидеров на рынке женской одежды. С географией рынка не только на территории России, своя продукция представлена еще и в таких странах как Казахстан и Дубай.

  • ООО "Интернэшнл Ресторант Брэндс" – это крупнейший франчайзинговый партнер компании Yum! Brands Russia & CIS в России, отвечающий за рост и развитие бренда KFC на территории РФ. На сегодняшний день у компании более 350 ресторанов. Ежедневно в рестораны приходит 200 000+ гостей.

  • ПАО «Ростелеком» — российский провайдер цифровых услуг и сервисов. Предоставляет услуги широкополосного доступа в Интернет, интерактивного телевидения, сотовой связи, местной и дальней телефонной связи и др. Занимает лидирующие позиции на российском рынке высокоскоростного доступа в интернет, платного ТВ, хранения и обработки данных, а также кибербезопасности

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Энергетика
    • Фармацевтика
  • Услуги
    • Переход на отечественные BI и DWH
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Техническая поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Платформы
    • FineBI
    • FineReport
    • FineDataLink
    • Коннекторы данных из 1С в BI
    • Airflow + NiFi
    • Visiology
    • Luxms BI
    • Modus BI
    • PIX BI
    • Arenadata
    • ClickHouse
    • Greenplum
    • Postgres Professional
    • Open-source BI: Superset/Metabase
    • Loginom
    • Yandex.DataLens
    • AI / Исскуственный интеллект
    • Optimacros
    • Шины данных
  • Курсы
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt
  • Функциональные решения
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • Сквозная аналитика
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
    • Политика конфиденциальности
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

 

 

 

 

 

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.