Twoje dane są dobre tylko wtedy, gdy możesz im zaufać. Użyj ograniczeń bazy danych, aby upewnić się, że jest ona dokładna, niezawodna i nie psuje modelu danych.
Kluczowe dania na wynos
- Użyj ograniczeń SQL, aby zachować integralność danych i zapewnić jednolitość w bazie danych. Ograniczenie NOT NULL wymusza na kolumnach odrzucanie wartości NULL.
- Zaimplementuj ograniczenia klucza podstawowego, aby zapewnić niepowtarzalność wartości w kolumnie lub zestawie kolumn. Zapobiega to duplikowaniu rekordów w tabeli bazy danych.
- Ograniczenia klucza obcego ustanawiają relacje między tabelami i zapobiegają działaniom, które zniszczyłyby połączenia między nimi. Zapewniają, że rekord w tabeli podrzędnej odwołuje się do tabeli nadrzędnej.
Baza danych jest niezbędna w wielu aplikacjach, ale jeśli nie masz wytycznych dotyczących przechowywania i przetwarzania danych, może pojawić się bałagan.
Ograniczenia SQL określają zasady przechowywania danych w tabeli. Po ustawieniu ograniczeń baza danych zgłosi błąd, jeśli spróbujesz zapisać dane naruszające te reguły. Ograniczenia pomagają zachować integralność danych i zapewniają jednolitość bazy danych.
Istnieje kilka typów ograniczeń SQL, których można użyć; oto niektóre z najbardziej przydatnych.
1. NIE NULL Ograniczenie
Kolumny bazy danych domyślnie akceptują dane z wartościami NULL. NULL zasadniczo oznacza, że nie istnieje żadna wartość. Ograniczenie NOT NULL zmusza kolumnę do odrzucenia wartości NULL.
To ograniczenie zapewnia, że każda kolumna musi zawierać wartość. Nie można dodać rekordu do bazy danych bez podania danych dla którejkolwiek kolumny z ograniczeniem NOT NULL.
Weź przykład A Klienci tabela. Istnieje kilka niezbędnych szczegółów dotyczących każdego klienta, które chcesz zapisać, np. jego imię i nazwisko. Dodaj ograniczenie NOT NULL do pól obowiązkowych, aby mieć pewność, że klienci podają te informacje.
Oto przykład pokazujący, jak można użyć ograniczenia NOT NULL w pliku a Baza danych PostgreSQL:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);
Jeśli spróbujesz wstawić rekord klienta bez Wiek pole, baza danych zaakceptuje je bez błędów:
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);
Jeśli jednak spróbujesz wstawić rekord bez Imię polu, baza danych odrzuci je z komunikatem o błędzie:
ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).
2. KLUCZ PODSTAWOWY Ograniczenie
KLUCZ to unikalny atrybut ustawiony dla kolumny lub pola, który identyfikuje krotkę tabeli (lub rekord) w systemach baz danych. Ograniczenie PRIMARY KEY zapewnia niepowtarzalność wartości w kolumnie lub zestawie kolumn. Działa jako unikalny identyfikator w wierszu, zapobiegając duplikowaniu rekordów w tabeli bazy danych.
Klucze podstawowe zawierają unikalne wartości i nie mogą zawierać wartości NULL. Każdy Tabela bazy danych SQL musi mieć tylko jeden klucz podstawowy. KLUCZ PODSTAWOWY może mieć jedną lub wiele kolumn.
Na przykład tworzysz bazę danych zawierającą rekordy klientów. Każdy klient musi wprowadzić swój numer identyfikacyjny inaczej niż wszyscy inni. Możesz zastosować ograniczenie klucza podstawowego, aby mieć pewność, że żaden z Twoich klientów nie będzie miał tego samego numeru identyfikacyjnego.
Poniższy kod pokazuje, jak wprowadzić ograniczenie klucza podstawowego w bazie danych MySQL:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
Baza danych nie zaakceptuje tej wartości, jeśli użytkownik wprowadzi inny rekord o podobnym identyfikatorze. Zamiast tego wyświetli błąd wskazujący na duplikację. W poniższym przykładzie użytkownik próbuje wstawić dwa rekordy o tym samym identyfikatorze:
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );
Baza danych wyświetli komunikat o błędzie:
Duplicate entry '1' for key 'PRIMARY'
Jeśli jednak zmienisz identyfikator drugiego klienta, baza danych zaakceptuje wpis. Dlatego klucz podstawowy zapewnia brak duplikatów identyfikatorów w rejestrach klientów.
3. Ograniczenie klucza obcego
Klucz obcy ustanowić relacje między dwiema tabelami. Możesz dodać klucz obcy do pola/kolumny w jednej tabeli, który odwołuje się do klucza podstawowego w innej tabeli.
Tabela z kluczem podstawowym jest tabelą nadrzędną, natomiast tabela z kluczem obcym jest tabelą podrzędną. Rekord nie może wówczas istnieć w tabeli podrzędnej bez odniesienia do tabeli nadrzędnej.
Ograniczenie klucza obcego zapobiega działaniom, które zniszczyłyby połączenia między tabelami. Na przykład nie możesz UPUSZCZAĆ jedną tabelę, jeśli łączy się ona z inną za pomocą klucza obcego. Będziesz musiał porzucić oba stoły na raz.
W przeciwieństwie do klucza podstawowego, możesz zduplikować klucz obcy i mieć więcej niż jeden w jednej tabeli. Wartości klucza obcego mogą być również ZERO. W poniższym przykładzie należy użyć Identyfikator klienta aby utworzyć zamówienie.
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');
Jeśli spróbujesz utworzyć zamówienie bez istniejącego Identyfikator klienta, baza danych wyświetla komunikat o błędzie:
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. UNIKALNE ograniczenie
To ograniczenie zapewnia, że żadne dwa wiersze nie mogą mieć tych samych wartości w określonej kolumnie. Podobnie jak klucze podstawowe, unikalne ograniczenie utrzymuje integralność danych i zapobiega duplikacjom wpisów. Jeśli pracujesz ze źle zaprojektowaną bazą danych bez ograniczenia UNIQUE, może się okazać, że będziesz musiał znajdź i usuń duplikaty.
W przeciwieństwie do kluczy podstawowych, w jednej tabeli można mieć wiele ograniczeń UNIQUE. Na przykład podczas tworzenia pliku Klienci tabeli, możesz chcieć mieć unikalne identyfikatory i numery telefonów. Aby dodać takie ograniczenie za pomocą serwera MySQL, użyj następującej składni:
CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Jeśli wstawisz do bazy rekordy z tym samym numerem telefonu komórkowego, wyświetli się komunikat o błędzie.
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );
Komunikat o błędzie będzie mniej więcej taki:
Duplicate entry '254000000' for key 'Mobile_No'
To UNIKALNE ograniczenie zapewnia, że w bazie danych nie będą znajdować się klienci o tych samych identyfikatorach i numerach telefonów komórkowych.
5. SPRAWDŹ ograniczenie
Ograniczenie CHECK ogranicza zakres wartości umieszczanych w kolumnie. Dodanie ograniczenia CHECK do kolumny umożliwi tylko określone wartości dla tej kolumny. Wymusza integralność danych, zapewniając, że użytkownik wstawi do tabeli tylko prawidłowe dane.
Ograniczenie CHECK musi oceniać wartość jako PRAWDA lub NIEZNANA dla każdego określonego wpisu w wierszu lub tabeli. Jeśli wartością jest FALSE, baza danych wyświetli komunikat o błędzie.
Na przykład w tabeli Klienci możesz chcieć obsługiwać tylko klientów w wieku powyżej 18 lat. Możesz dodać ograniczenie CHECK, aby mieć pewność, że nie obsługujesz nieletnich klientów. Możesz dodać ograniczenie w bazie danych PostgreSQL, jak pokazano w następującym kodzie:
CREATETABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Jeśli teraz spróbujesz wprowadzić wiek klienta poniżej 18 lat:
INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );
Baza danych wyświetli następujący komunikat o błędzie:
ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)
Jak dodawać i usuwać ograniczenia SQL z baz danych
Ograniczenia SQL nie są wyryte w kamieniu. Możesz dodawać lub usuwać ograniczenia w istniejących tabelach za pomocą instrukcji ALTER TABLE. Instrukcja ALTER umożliwia pracę z ograniczeniami w celu dostosowania do potrzeb danych.
Istnieje wiele innych ograniczeń SQL, których możesz się nauczyć, aby zaprojektować bazę danych według własnych upodobań. Możesz zacząć od tych wymienionych w tym artykule.