Что такое ограничения (constraints) в базах данных?

Ответ

Ограничения (constraints) в БД — это правила, которые применяются к столбцам или таблицам для обеспечения целостности, достоверности и согласованности данных. Они не позволяют вставлять некорректные данные на уровне самой базы данных.

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

  1. PRIMARY KEY (Первичный ключ)

    • Уникально идентифицирует каждую запись в таблице. Неявно включает в себя UNIQUE и NOT NULL.
      CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
  2. FOREIGN KEY (Внешний ключ)

    • Обеспечивает ссылочную целостность, связывая строку в одной таблице со строкой в другой.
      CREATE TABLE orders (id INT, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id));
  3. UNIQUE (Уникальность)

    • Гарантирует, что все значения в столбце (или группе столбцов) являются уникальными.
      CREATE TABLE products (id INT, sku VARCHAR(50) UNIQUE);
  4. NOT NULL (Непустое значение)

    • Запрещает хранить NULL в столбце. Поле должно всегда иметь значение.
      CREATE TABLE employees (id INT, name VARCHAR(50) NOT NULL);
  5. CHECK (Проверка)

    • Проверяет, соответствует ли значение в столбце заданному условию.
      CREATE TABLE products (price DECIMAL(10, 2) CHECK (price > 0));
  6. DEFAULT (Значение по умолчанию)

    • Предоставляет значение по умолчанию для столбца, если оно не указано при вставке новой записи.
      CREATE TABLE orders (status VARCHAR(20) DEFAULT 'pending', created_at TIMESTAMP DEFAULT NOW());

Использование ограничений — это фундаментальный подход для поддержания качества данных на уровне СУБД, что снижает вероятность ошибок в логике приложения.

Ответ 18+ 🔞

А, слушай, про ограничения в базе данных! Это ж, блядь, как свод правил в армии, только для твоих данных. Если их не поставить — будет пиздец и бардак, а не база. Это такие железные замки, которые не дают всяким распиздям-разработчикам воткнуть в таблицу какую-нибудь дичь.

Вот основные типы, чтобы ты понимал, с чем имеешь дело:

  1. PRIMARY KEY (Первичный ключ)

    • Это, сука, главный паспорт каждой строчки в таблице. Уникальный, неповторимый и не может быть пустым. Без него — нихуя не поймёшь, где какая запись.
      CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
  2. FOREIGN KEY (Внешний ключ)

    • А вот это уже связь между таблицами, семейные узы, блядь. Не даёт тебе вписать в заказы user_id от пользователя, которого в природе не существует. Ссылочная целостность, ёпта!
      CREATE TABLE orders (id INT, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id));
  3. UNIQUE (Уникальность)

    • Тут всё просто, как три копейки: в этом столбце все значения должны быть разными. Попробуй впихни дубликат — получишь в рот и ошибку от СУБД.
      CREATE TABLE products (id INT, sku VARCHAR(50) UNIQUE);
  4. NOT NULL (Непустое значение)

    • Вообще, блядь, элементарно: поле не может быть пустым. Хочешь добавить запись без имени? Иди нахуй, не получится. Обязательно что-нибудь впиши.
      CREATE TABLE employees (id INT, name VARCHAR(50) NOT NULL);
  5. CHECK (Проверка)

    • Это уже твой личный охранник с условием. Цена должна быть больше нуля? Проверяет. Возраст от 18? Проверяет. Самые хитрые правила можно накрутить, главное — не выеби мозг СУБД.
      CREATE TABLE products (price DECIMAL(10, 2) CHECK (price > 0));
  6. DEFAULT (Значение по умолчанию)

    • Ленивая, но хитрая жопа. Если ты при вставке не указал значение — база сама подставит то, что ты заранее прописал. Статус заказа 'pending', дата создания NOW() — красота, в рот меня чих-пых!
      CREATE TABLE orders (status VARCHAR(20) DEFAULT 'pending', created_at TIMESTAMP DEFAULT NOW());

Короче, если не использовать эти ограничения — вся ответственность за целостность данных ляжет на твое кривое приложение. А оно, сука, обязательно где-нибудь обосрётся. Доверяй, но проверяй, а лучше — перепроверяй на уровне базы, чтобы потом не было мучительно больно.