Ответ
Ограничения (constraints) в БД — это правила, которые применяются к столбцам или таблицам для обеспечения целостности, достоверности и согласованности данных. Они не позволяют вставлять некорректные данные на уровне самой базы данных.
Основные типы ограничений:
-
PRIMARY KEY(Первичный ключ)- Уникально идентифицирует каждую запись в таблице. Неявно включает в себя
UNIQUEиNOT NULL.CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
- Уникально идентифицирует каждую запись в таблице. Неявно включает в себя
-
FOREIGN KEY(Внешний ключ)- Обеспечивает ссылочную целостность, связывая строку в одной таблице со строкой в другой.
CREATE TABLE orders (id INT, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id));
- Обеспечивает ссылочную целостность, связывая строку в одной таблице со строкой в другой.
-
UNIQUE(Уникальность)- Гарантирует, что все значения в столбце (или группе столбцов) являются уникальными.
CREATE TABLE products (id INT, sku VARCHAR(50) UNIQUE);
- Гарантирует, что все значения в столбце (или группе столбцов) являются уникальными.
-
NOT NULL(Непустое значение)- Запрещает хранить
NULLв столбце. Поле должно всегда иметь значение.CREATE TABLE employees (id INT, name VARCHAR(50) NOT NULL);
- Запрещает хранить
-
CHECK(Проверка)- Проверяет, соответствует ли значение в столбце заданному условию.
CREATE TABLE products (price DECIMAL(10, 2) CHECK (price > 0));
- Проверяет, соответствует ли значение в столбце заданному условию.
-
DEFAULT(Значение по умолчанию)- Предоставляет значение по умолчанию для столбца, если оно не указано при вставке новой записи.
CREATE TABLE orders (status VARCHAR(20) DEFAULT 'pending', created_at TIMESTAMP DEFAULT NOW());
- Предоставляет значение по умолчанию для столбца, если оно не указано при вставке новой записи.
Использование ограничений — это фундаментальный подход для поддержания качества данных на уровне СУБД, что снижает вероятность ошибок в логике приложения.
Ответ 18+ 🔞
А, слушай, про ограничения в базе данных! Это ж, блядь, как свод правил в армии, только для твоих данных. Если их не поставить — будет пиздец и бардак, а не база. Это такие железные замки, которые не дают всяким распиздям-разработчикам воткнуть в таблицу какую-нибудь дичь.
Вот основные типы, чтобы ты понимал, с чем имеешь дело:
-
PRIMARY KEY(Первичный ключ)- Это, сука, главный паспорт каждой строчки в таблице. Уникальный, неповторимый и не может быть пустым. Без него — нихуя не поймёшь, где какая запись.
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
- Это, сука, главный паспорт каждой строчки в таблице. Уникальный, неповторимый и не может быть пустым. Без него — нихуя не поймёшь, где какая запись.
-
FOREIGN KEY(Внешний ключ)- А вот это уже связь между таблицами, семейные узы, блядь. Не даёт тебе вписать в заказы
user_idот пользователя, которого в природе не существует. Ссылочная целостность, ёпта!CREATE TABLE orders (id INT, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id));
- А вот это уже связь между таблицами, семейные узы, блядь. Не даёт тебе вписать в заказы
-
UNIQUE(Уникальность)- Тут всё просто, как три копейки: в этом столбце все значения должны быть разными. Попробуй впихни дубликат — получишь в рот и ошибку от СУБД.
CREATE TABLE products (id INT, sku VARCHAR(50) UNIQUE);
- Тут всё просто, как три копейки: в этом столбце все значения должны быть разными. Попробуй впихни дубликат — получишь в рот и ошибку от СУБД.
-
NOT NULL(Непустое значение)- Вообще, блядь, элементарно: поле не может быть пустым. Хочешь добавить запись без имени? Иди нахуй, не получится. Обязательно что-нибудь впиши.
CREATE TABLE employees (id INT, name VARCHAR(50) NOT NULL);
- Вообще, блядь, элементарно: поле не может быть пустым. Хочешь добавить запись без имени? Иди нахуй, не получится. Обязательно что-нибудь впиши.
-
CHECK(Проверка)- Это уже твой личный охранник с условием. Цена должна быть больше нуля? Проверяет. Возраст от 18? Проверяет. Самые хитрые правила можно накрутить, главное — не выеби мозг СУБД.
CREATE TABLE products (price DECIMAL(10, 2) CHECK (price > 0));
- Это уже твой личный охранник с условием. Цена должна быть больше нуля? Проверяет. Возраст от 18? Проверяет. Самые хитрые правила можно накрутить, главное — не выеби мозг СУБД.
-
DEFAULT(Значение по умолчанию)- Ленивая, но хитрая жопа. Если ты при вставке не указал значение — база сама подставит то, что ты заранее прописал. Статус заказа
'pending', дата созданияNOW()— красота, в рот меня чих-пых!CREATE TABLE orders (status VARCHAR(20) DEFAULT 'pending', created_at TIMESTAMP DEFAULT NOW());
- Ленивая, но хитрая жопа. Если ты при вставке не указал значение — база сама подставит то, что ты заранее прописал. Статус заказа
Короче, если не использовать эти ограничения — вся ответственность за целостность данных ляжет на твое кривое приложение. А оно, сука, обязательно где-нибудь обосрётся. Доверяй, но проверяй, а лучше — перепроверяй на уровне базы, чтобы потом не было мучительно больно.