Ваши данные хороши только в том случае, если вы можете им доверять. Используйте ограничения базы данных, чтобы обеспечить ее точность, надежность и не нарушить вашу модель данных.
Ключевые выводы
- Используйте ограничения SQL для поддержания целостности данных и обеспечения единообразия в вашей базе данных. Ограничение NOT NULL заставляет столбцы отклонять значения NULL.
- Внедрите ограничения первичного ключа, чтобы гарантировать уникальность значений в столбце или наборе столбцов. Это предотвращает дублирование записей в таблице базы данных.
- Ограничения внешнего ключа устанавливают связи между таблицами и предотвращают действия, которые могут разрушить связи между ними. Они гарантируют, что запись в дочерней таблице ссылается на родительскую таблицу.
База данных необходима для многих приложений, но в ней может возникнуть беспорядок, если у вас нет правил хранения и обработки данных.
Ограничения SQL определяют правила хранения данных в таблице. Когда вы устанавливаете ограничения, база данных выдаст ошибку, если вы попытаетесь сохранить данные, нарушающие эти правила. Ограничения помогают поддерживать целостность данных и обеспечивать единообразие в вашей базе данных.
Существует несколько типов ограничений SQL, которые вы можете использовать; вот некоторые из самых полезных.
1. Ограничение NOT NULL
Столбцы базы данных по умолчанию принимают данные со значениями NULL. NULL по сути означает, что значения не существует. Ограничение NOT NULL заставляет столбец отклонять значения NULL.
Это ограничение гарантирует, что каждый столбец должен содержать значение. Вы не можете добавить запись в базу данных, не предоставив данные для каких-либо столбцов с ограничением NOT NULL.
Возьмем пример Клиенты стол. Есть некоторые необходимые сведения о каждом клиенте, которых вы хотите записать, например, его имя. Добавьте ограничение NOT NULL в обязательные поля, чтобы клиенты предоставили эту информацию.
Вот пример, показывающий, как можно использовать ограничение NOT NULL в База данных PostgreSQL:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);
Если вы попытаетесь вставить запись о клиенте без Возраст поле, база данных примет его без ошибок:
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);
Однако если вы попытаетесь вставить запись без Имя поле, база данных отклонит его с сообщением об ошибке:
ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).
2. Ограничение ПЕРВИЧНОГО КЛЮЧА
KEY — это уникальный атрибут, установленный для столбца или поля, который идентифицирует кортеж (или запись) таблицы в системах баз данных. Ограничение PRIMARY KEY обеспечивает уникальность значений в столбце или наборе столбцов. Он действует как уникальный идентификатор в строке, предотвращая дублирование записей в таблице базы данных.
Первичные ключи содержат уникальные значения и не могут содержать значения NULL. Каждый Таблица базы данных SQL должен иметь только один первичный ключ. ПЕРВИЧНЫЙ КЛЮЧ может иметь один или несколько столбцов.
Например, вы создаете базу данных записей клиентов. Вам нужно, чтобы каждый клиент вводил свои идентификационные номера отдельно от остальных. Вы можете применить ограничение первичного ключа, чтобы гарантировать, что ни у одного из ваших клиентов не будет одинакового идентификационного номера.
Следующий код показывает, как можно ввести ограничение первичного ключа в базе данных MySQL:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
База данных не примет это значение, если пользователь введет другую запись с аналогичным идентификатором. Вместо этого он выдаст ошибку, указывающую на дублирование. В следующем примере пользователь пытается вставить две записи с одинаковым идентификатором:
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );
В базе данных появится сообщение об ошибке:
Duplicate entry '1' for key 'PRIMARY'
Но если вы измените идентификатор второго клиента, база данных примет запись. Таким образом, первичный ключ гарантирует отсутствие дублирующих идентификаторов в записях ваших клиентов.
3. Ограничение ВНЕШНЕГО КЛЮЧА
Внешние ключи установить связи между двумя таблицами. Вы можете добавить внешний ключ к полю/столбцу в одной таблице, которое ссылается на первичный ключ в другой таблице.
Таблица с первичным ключом является родительской таблицей, а таблица с внешним ключом — дочерней. Запись не может существовать в дочерней таблице без ссылки на родительскую таблицу.
Ограничение внешнего ключа предотвращает действия, которые могут разрушить связи между таблицами. Например, вы не можете УРОНИТЬ одну таблицу, если она связана с другой с помощью внешнего ключа. Вам придется удалить обе таблицы одновременно.
В отличие от первичного ключа, вы можете дублировать внешний ключ и иметь более одного в одной таблице. Значения внешнего ключа также могут быть НУЛЕВОЙ. В следующем примере вы должны использовать Пользовательский ИД для создания заказа.
CREATETABLE Customers (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);CREATETABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);INSERTINTO Customers(customer_id, first_name, last_name)
VALUES (1, 'Christian', 'Dior');
INSERTINTO Orders(order_id, customer_id, order_date)
VALUES (1, 1, '2023-08-07');
Если вы попытаетесь создать заказ без существующего Пользовательский ИД, база данных показывает сообщение об ошибке:
Cannot add or update a child row: a foreign key constraint fails
(`db_9_4ee205c`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY
(`customer_id`) REFERENCES `customers` (`customer_id`))
4. Уникальное ограничение
Это ограничение гарантирует, что никакие две строки не могут иметь одинаковые значения для определенного столбца. Как и первичные ключи, ограничение уникальности поддерживает целостность данных и предотвращает дублирование записей. Если вы работаете с плохо спроектированной базой данных без ограничения UNIQUE, вам может потребоваться найти и удалить дубликаты.
В отличие от первичных ключей, в одной таблице может быть множество ограничений UNIQUE. Например, при создании Клиенты таблице, вы можете захотеть иметь уникальные идентификаторы и номера телефонов. Чтобы добавить такое ограничение с помощью сервера MySQL, используйте следующий синтаксис:
CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Если вы вставите записи с одним и тем же номером мобильного телефона в базу данных, появится сообщение об ошибке.
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );
Сообщение об ошибке будет примерно таким:
Duplicate entry '254000000' for key 'Mobile_No'
Это ограничение UNIQUE гарантирует, что в базе данных не будет клиентов с одинаковыми идентификаторами или номерами мобильных телефонов.
5. ПРОВЕРИТЬ ограничение
Ограничение CHECK ограничивает диапазон значений, помещаемых в столбец. Добавление ограничения CHECK к столбцу позволит использовать только указанные значения для этого столбца. Он обеспечивает целостность данных, гарантируя, что пользователь вставляет в таблицу только действительные данные.
Ограничение CHECK должно оценивать значение как TRUE или UNKNOWN для каждой указанной строки или записи таблицы. Если значение равно FALSE, база данных отображает сообщение об ошибке.
Например, в таблице «Клиенты» вы можете захотеть обслуживать только клиентов старше 18 лет. Вы можете добавить ограничение CHECK, чтобы гарантировать, что вы не обслуживаете несовершеннолетних клиентов. Вы можете добавить ограничение в базу данных PostgreSQL, как показано в следующем коде:
CREATETABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Теперь, если вы попытаетесь указать возраст клиента ниже 18 лет:
INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );
База данных покажет такое сообщение об ошибке:
ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)
Как добавлять и удалять ограничения SQL из баз данных
Ограничения SQL не высечены в камне. Вы можете добавлять или удалять ограничения для существующих таблиц с помощью оператора ALTER TABLE. Оператор ALTER позволяет вам работать с ограничениями в соответствии с вашими потребностями в данных.
Существует множество других ограничений SQL, которые вы можете изучить, чтобы спроектировать базу данных по своему вкусу. Начать можно с тех, которые перечислены в этой статье.