Методы ограничения значений столбцов в базах данных SQL

Чтобы ограничить значения в столбце базы данных SQL, вы можете использовать несколько методов. Вот некоторые распространенные подходы и примеры кода:

  1. Ограничения проверки данных.
    Вы можете определить ограничения для столбца, чтобы обеспечить соблюдение определенных правил для разрешенных значений. Например, вы можете использовать ограничение CHECK, чтобы ограничить диапазон значений, или ограничение UNIQUE, чтобы обеспечить уникальность.

    -- Restricting values between 1 and 100
    CREATE TABLE MyTable (
       MyColumn INT CHECK (MyColumn BETWEEN 1 AND 100)
    );
    -- Restricting unique values
    CREATE TABLE MyTable (
       MyColumn INT UNIQUE
    );
  2. Перечисляемые типы данных.
    Если столбец имеет ограниченный набор разрешенных значений, вы можете использовать перечислимый тип данных, чтобы явно определить эти значения. Это ограничивает столбец принятием значений только из определенного списка.

    CREATE TYPE StatusEnum AS ENUM ('Active', 'Inactive', 'Pending');
    CREATE TABLE MyTable (
       Status StatusEnum
    );
  3. Ограничения внешнего ключа.
    Если вы хотите ограничить значения в столбце значениями, существующими в другой таблице, вы можете использовать ограничения внешнего ключа. Это обеспечивает ссылочную целостность между таблицами.

    -- Creating a referenced table
    CREATE TABLE Statuses (
       ID INT PRIMARY KEY,
       Name VARCHAR(50)
    );
    -- Creating the main table with a foreign key constraint
    CREATE TABLE MyTable (
       ID INT PRIMARY KEY,
       StatusID INT,
       FOREIGN KEY (StatusID) REFERENCES Statuses(ID)
    );
  4. Триггеры.
    Триггеры можно использовать для обеспечения соблюдения пользовательских бизнес-правил и логики проверки. Вы можете создать триггер, который выполняется до или после операции изменения данных в таблице и проверяет вставляемые или обновляемые значения.

    -- Creating a trigger to restrict values
    CREATE TRIGGER RestrictValuesTrigger
    BEFORE INSERT OR UPDATE ON MyTable
    FOR EACH ROW
    BEGIN
       IF NEW.MyColumn NOT IN (1, 2, 3) THEN
           SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid value';
       END IF;
    END;