Ваши подаци су добри само ако им можете веровати. Користите ограничења базе података да бисте били сигурни да је тачна, поуздана и да не крши ваш модел података.

Кључне Такеаваис

  • Користите СКЛ ограничења да одржите интегритет података и обезбедите униформност у бази података. Ограничење НОТ НУЛЛ присиљава колоне да одбију НУЛЛ вредности.
  • Имплементирајте ограничења примарног кључа да бисте осигурали јединственост вредности у колони или скупу колона. Ово спречава дуплирање записа у табели базе података.
  • Ограничења страног кључа успостављају односе између табела и спречавају радње које би уништиле везе између њих. Они осигуравају да запис у подређеној табели упућује на родитељску табелу.

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

СКЛ ограничења одређују правила за чување података у табели. Када поставите ограничења, база података ће приказати грешку ако покушате да ускладиштите податке који крше ова правила. Ограничења помажу у одржавању интегритета података и осигуравају униформност у вашој бази података.

Постоји неколико типова СКЛ ограничења које можете користити; ево неких од најкориснијих.

1. НОТ НУЛЛ Ограничење

Колоне базе података подразумевано прихватају податке са вредностима НУЛЛ. НУЛЛ у суштини значи да вредност не постоји. Ограничење НОТ НУЛЛ присиљава колону да одбије НУЛЛ вредности.

Ово ограничење осигурава да свака колона мора да садржи вредност. Не можете додати запис у базу података без давања података за било коју колону са ограничењем НОТ НУЛЛ.

Узмимо пример а Купци сто. Постоје неки неопходни детаљи о сваком клијенту које желите да запишете, попут њиховог имена. Додајте ограничење НОТ НУЛЛ у обавезна поља како бисте били сигурни да клијенти пружају ове информације.

Ево примера који показује како можете да користите ограничење НОТ НУЛЛ у а ПостгреСКЛ база података:

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. ПРИМАРНИ КЉУЧ Ограничење

КЉУЧ је јединствени атрибут постављен на колону или поље које идентификује тупле (или запис) табеле у системима база података. Ограничење ПРИМАРИ КЕИ обезбеђује јединственост вредности у колони или скупу колона. Делује као јединствени идентификатор у низу, спречавајући дупле записе у табели базе података.

Примарни кључеви садрже јединствене вредности и не могу садржати НУЛЛ вредности. Сваки Табела СКЛ базе података мора имати само један примарни кључ. ПРИМАРНИ КЉУЧ може имати једну или више колона.

На пример, креирате базу података о клијентима. Потребно је да сваки клијент унесе своје ИД бројеве другачије од свих осталих. Можете да примените ограничење примарног кључа да бисте били сигурни да ниједан од ваших клијената нема исти ИД број.

Следећи код показује како можете да уведете ограничење примарног кључа у МиСКЛ базу података:

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. Јединствен ограничење

Ово ограничење осигурава да два реда не могу имати исте вредности за одређену колону. Попут примарних кључева, јединствено ограничење одржава интегритет података и спречава дупле уносе. Ако радите са лоше дизајнираном базом података без ограничења УНИКУЕ, можда ћете морати пронађите и избришите дупликате.

За разлику од примарних кључева, можете имати много ЈЕДИНСТВЕНИХ ограничења на једној табели. На пример, приликом креирања а Купци табеле, можда ћете желети да имате јединствене ИД-ове и бројеве телефона. Да бисте додали такво ограничење користећи МиСКЛ сервер, користите ову синтаксу:

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. ЦХЕЦК Ограничење

Ограничење ЦХЕЦК ограничава опсег вредности стављен у колону. Додавање ограничења ЦХЕЦК на колону ће дозволити само одређене вредности за ту колону. Он спроводи интегритет података тако што осигурава да корисник само убацује важеће податке у табелу.

Ограничење ЦХЕЦК мора проценити вредност као ТРУЕ или НЕПОЗНАТО за сваки наведени унос у ред или табелу. Ако је вредност ФАЛСЕ, база података приказује поруку о грешци.

На пример, у табели Купци можда желите да услужујете само клијенте старије од 18 година. Можете да додате ограничење ПРОВЕРИ да бисте били сигурни да нећете услуживати малолетне клијенте. Можете додати ограничење у ПостгреСКЛ базу података, као што је приказано у следећем коду:

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)

Како додати и уклонити СКЛ ограничења из база података

СКЛ ограничења нису бачена у камен. Можете да додате или уклоните ограничења за постојеће табеле користећи израз АЛТЕР ТАБЛЕ. Изјава АЛТЕР вам омогућава да радите са ограничењима која одговарају вашим потребама за подацима.

Постоји много више СКЛ ограничења која можете научити да дизајнирате базу података по свом укусу. Можете почети са онима наведеним у овом чланку.