Dine data er kun gode, hvis du kan stole på dem. Brug databasebegrænsninger for at sikre, at den er nøjagtig, pålidelig og ikke bryder din datamodel.
Nøgle takeaways
- Brug SQL-begrænsninger til at bevare dataintegriteten og sikre ensartethed i din database. NOT NULL-begrænsningen tvinger kolonner til at afvise NULL-værdier.
- Implementer primære nøglebegrænsninger for at sikre unikke værdier i en kolonne eller et sæt af kolonner. Dette forhindrer dublerede poster i en databasetabel.
- Udenlandske nøglebegrænsninger etablerer relationer mellem tabeller og forhindrer handlinger, der ville ødelægge forbindelser mellem dem. De sikrer, at en post i den underordnede tabel refererer til den overordnede tabel.
En database er essentiel for mange applikationer, men den kan blive rodet, hvis du ikke har retningslinjer for lagring og behandling af data.
SQL-begrænsninger angiver regler for lagring af data i en tabel. Når du angiver begrænsninger, vil databasen give en fejl, hvis du forsøger at gemme data, der overtræder disse regler. Begrænsninger hjælper med at bevare dataintegriteten og sikre ensartethed i din database.
Der er flere typer SQL-begrænsninger, som du kan bruge; her er nogle af de mest nyttige.
1. IKKE NULL Begrænsning
Databasekolonner accepterer som standard data med NULL-værdier. NULL betyder i bund og grund, at der ikke eksisterer nogen værdi. NOT NULL-begrænsningen tvinger en kolonne til at afvise NULL-værdier.
Denne begrænsning sikrer, at hver kolonne skal indeholde en værdi. Du kan ikke tilføje en post til databasen uden at levere data for nogen kolonner med NOT NULL-begrænsningen.
Tag eksemplet med en Kunder bord. Der er nogle nødvendige detaljer om hver kunde, som du vil have registreret, f.eks. deres navn. Tilføj NOT NULL-begrænsningen til de obligatoriske felter for at sikre, at kunderne giver disse oplysninger.
Her er et eksempel, der viser, hvordan du kan bruge NOT NULL-begrænsningen i en PostgreSQL database:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);
Hvis du prøver at indsætte en kundejournal uden Alder felt, vil databasen acceptere det uden fejl:
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);
Men hvis du prøver at indsætte en post uden Fornavn feltet, vil databasen afvise det med en fejlmeddelelse:
ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).
2. PRIMÆR NØGLE Begrænsning
En NØGLE er en unik attribut sat til en kolonne eller et felt, der identificerer en tabels tuple (eller en post) i databasesystemer. En PRIMÆR NØGLE-begrænsning sikrer entydigheden af værdier i en kolonne eller et sæt af kolonner. Det fungerer som en unik identifikator i en række, der forhindrer duplikerede poster i en databasetabel.
Primære nøgler indeholder unikke værdier og kan ikke indeholde NULL-værdier. Hver SQL database tabel skal kun have én primær nøgle. Den PRIMÆR NØGLE kan have enkelte eller flere kolonner.
For eksempel opretter du en database med kunderegistreringer. Du skal indtaste deres ID-numre anderledes end alle andre. Du kan anvende den primære nøglebegrænsning for at sikre, at ingen af dine kunder har det samme id-nummer.
Følgende kode viser, hvordan du kan indføre en primær nøglebegrænsning i en MySQL-database:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
Databasen vil ikke acceptere denne værdi, hvis en bruger indtaster en anden post med et lignende ID. I stedet vil det give en fejl, der indikerer duplikering. Brugeren forsøger at indsætte to poster med samme ID i følgende eksempel:
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );
Databasen vil vise en fejlmeddelelse:
Duplicate entry '1' for key 'PRIMARY'
Men hvis du ændrer ID på den anden kunde, accepterer databasen indtastningen. Derfor sikrer den primære nøgle ingen duplikerede id'er i dine kunderegistre.
3. UDENLANDSKE NØGLE-begrænsning
Fremmednøgler etablere relationer mellem to tabeller. Du kan tilføje en fremmednøgle til et felt/kolonne i én tabel, der refererer til primærnøglen i en anden tabel.
Tabellen med den primære nøgle er den overordnede tabel, mens tabellen med den fremmede nøgle er den underordnede tabel. En post kan så ikke eksistere i den underordnede tabel uden en reference til den overordnede tabel.
Begrænsningen for fremmednøgle forhindrer handlinger, der ville ødelægge links mellem tabeller. Det kan du f.eks. ikke DRÅBE en tabel, hvis den linker til en anden med en fremmednøgle. Du bliver nødt til at droppe begge borde på én gang.
I modsætning til en primærnøgle kan du duplikere en fremmednøgle og have mere end én i en enkelt tabel. Fremmednøgleværdier kan også være NUL. I det følgende eksempel skal du bruge Kunde ID at oprette en ordre.
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');
Hvis du prøver at oprette en ordre uden en eksisterende Kunde ID, viser databasen en fejlmeddelelse:
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. UNIK begrænsning
Denne begrænsning sikrer, at ikke to rækker kan have de samme værdier for en bestemt kolonne. Ligesom primærnøgler opretholder en unik begrænsning dataintegriteten og forhindrer duplikerede indtastninger. Hvis du arbejder med en dårligt designet database uden den UNIKKE begrænsning, kan du ende med at blive nødt til det finde og slette dubletterne.
I modsætning til primærnøgler kan du have mange UNIQUE begrænsninger på én tabel. For eksempel, når du opretter en Kunder tabel, vil du måske have unikke id'er og telefonnumre. For at tilføje en sådan begrænsning ved hjælp af MySQL-server, brug denne syntaks:
CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Hvis du indsætter poster med samme mobilnummer i databasen, vil den så vise en fejlmeddelelse.
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );
Fejlmeddelelsen vil være sådan her:
Duplicate entry '254000000' for key 'Mobile_No'
Denne UNIKKE begrænsning sikrer, at databasen ikke har kunder med de samme id'er eller mobilnumre.
5. KONTROLLER begrænsning
KONTROL-begrænsningen begrænser værdiområdet i en kolonne. Tilføjelse af en CHECK-begrænsning på en kolonne vil kun tillade specificerede værdier for den kolonne. Det håndhæver dataintegritet ved at sikre, at en bruger kun indsætter gyldige data i en tabel.
CHECK-begrænsningen skal evaluere en værdi som TRUE eller UNKNOWN for hver specificeret række eller tabelpost. Hvis værdien er FALSK, viser databasen en fejlmeddelelse.
I Kunder-tabellen ønsker du f.eks. kun at betjene kunder over 18 år. Du kan tilføje en CHECK-begrænsning for at sikre, at du ikke betjener mindreårige kunder. Du kan tilføje begrænsningen i en PostgreSQL-database, som vist i følgende kode:
CREATETABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Hvis du nu forsøger at indsætte en kundes alder under 18 år:
INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );
Databasen vil vise en fejlmeddelelse som denne:
ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)
Sådan tilføjes og fjernes SQL-begrænsninger fra databaser
SQL-begrænsninger er ikke støbt i sten. Du kan tilføje eller fjerne begrænsninger på eksisterende tabeller ved hjælp af ALTER TABLE-sætningen. ALTER-sætningen giver dig mulighed for at arbejde med begrænsninger, der passer til dine databehov.
Der er mange flere SQL-begrænsninger, du kan lære at designe en database efter din smag. Du kan starte med dem, der er anført i denne artikel.