Вашите данни са добри само ако можете да им се доверите. Използвайте ограничения на базата данни, за да сте сигурни, че тя е точна, надеждна и не нарушава вашия модел на данни.

Ключови изводи

  • Използвайте SQL ограничения, за да поддържате целостта на данните и да осигурите еднаквост във вашата база данни. Ограничението NOT NULL принуждава колоните да отхвърлят NULL стойности.
  • Приложете ограничения на първичния ключ, за да осигурите уникалност на стойностите в колона или набор от колони. Това предотвратява дублиране на записи в таблица на база данни.
  • Ограниченията на външния ключ установяват връзки между таблиците и предотвратяват действия, които биха разрушили връзките между тях. Те гарантират, че запис в дъщерната таблица препраща към родителската таблица.

Базата данни е от съществено значение за много приложения, но може да се обърка, ако нямате указания за съхранение и обработка на данни.

SQL ограниченията определят правила за съхраняване на данни в таблица. Когато зададете ограничения, базата данни ще изведе грешка, ако се опитате да съхраните данни, които нарушават тези правила. Ограниченията помагат да се поддържа целостта на данните и да се гарантира еднаквост във вашата база данни.

instagram viewer

Има няколко вида SQL ограничения, които можете да използвате; ето някои от най-полезните.

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

Колоните на базата данни по подразбиране приемат данни с NULL стойности. NULL по същество означава, че не съществува стойност. Ограничението NOT NULL принуждава колона да отхвърля NULL стойности.

Това ограничение гарантира, че всяка колона трябва да съдържа стойност. Не можете да добавите запис към базата данни, без да предоставите данни за колони с ограничението NOT NULL.

Вземете примера на a Клиенти маса. Има някои необходими подробности за всеки клиент, които искате да бъдат записани, като името им. Добавете ограничението NOT NULL към задължителните полета, за да сте сигурни, че клиентите предоставят тази информация.

Ето един пример, показващ как можете да използвате ограничението NOT NULL в a 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. Ограничение PRIMARY 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'

Но ако промените ID на втория клиент, базата данни приема записа. Следователно първичният ключ гарантира, че няма дублирани идентификатори във вашите клиентски записи.

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

Външни ключове установяване на връзки между две таблици. Можете да добавите външен ключ към поле/колона в една таблица, който препраща към първичния ключ в друга таблица.

Таблицата с първичния ключ е родителската таблица, докато таблицата с външния ключ е дъщерната таблица. След това запис не може да съществува в дъщерната таблица без препратка към родителската таблица.

Ограничението за външен ключ предотвратява действия, които биха разрушили връзките между таблиците. Например не можете ИЗПУСКАЙТЕ една таблица, ако се свързва с друга с външен ключ. Ще трябва да пуснете и двете маси наведнъж.

За разлика от първичния ключ, можете да дублирате външен ключ и да имате повече от един в една таблица. Стойностите на външния ключ също могат да бъдат НУЛА. В следващия пример трябва да използвате Клиентски номер за създаване на поръчка.

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, може да се наложи да го направите намиране и изтриване на дубликати.

За разлика от първичните ключове, можете да имате много УНИКАЛНИ ограничения на една таблица. Например, когато създавате a Клиенти таблица, може да искате да имате уникални идентификатори и телефонни номера. За да добавите такова ограничение с помощта на 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'

Това УНИКАЛНО ограничение гарантира, че базата данни няма да има клиенти с едни и същи идентификатори или мобилни номера.

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 ограничения, които можете да научите, за да проектирате база данни по ваш вкус. Можете да започнете с изброените в тази статия.