Dataene dine er bare gode hvis du kan stole på dem. Bruk databasebegrensninger for å sikre at den er nøyaktig, pålitelig og ikke bryter datamodellen din.
Viktige takeaways
- Bruk SQL-begrensninger for å opprettholde dataintegriteten og sikre enhetlighet i databasen. NOT NULL-begrensningen tvinger kolonner til å avvise NULL-verdier.
- Implementer primærnøkkelbegrensninger for å sikre unike verdier i en kolonne eller et sett med kolonner. Dette forhindrer dupliserte poster i en databasetabell.
- Utenlandske nøkkelbegrensninger etablerer relasjoner mellom tabeller og forhindrer handlinger som vil ødelegge koblinger mellom dem. De sikrer at en post i den underordnede tabellen refererer til den overordnede tabellen.
En database er avgjørende for mange applikasjoner, men det kan bli rotete hvis du ikke har retningslinjer for lagring og behandling av data.
SQL-begrensninger spesifiserer regler for lagring av data i en tabell. Når du setter begrensninger, vil databasen gi en feilmelding hvis du prøver å lagre data som bryter disse reglene. Begrensninger bidrar til å opprettholde dataintegriteten og sikre enhetlighet i databasen.
Det er flere typer SQL-begrensninger du kan bruke; her er noen av de mest nyttige.
1. IKKE NULL-begrensning
Databasekolonner godtar som standard data med NULL-verdier. NULL betyr i hovedsak at ingen verdi eksisterer. NOT NULL-begrensningen tvinger en kolonne til å avvise NULL-verdier.
Denne begrensningen sikrer at hver kolonne må inneholde en verdi. Du kan ikke legge til en post i databasen uten å oppgi data for noen kolonner med NOT NULL-begrensningen.
Ta eksemplet med en Kunder bord. Det er noen nødvendige detaljer om hver kunde du vil ha registrert, som navnet deres. Legg til NOT NULL-begrensningen i de obligatoriske feltene for å sikre at kundene oppgir denne informasjonen.
Her er et eksempel som viser hvordan du kan bruke NOT NULL-begrensningen 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 å sette inn en kundepost uten Alder feltet, vil databasen godta det uten feil:
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);
Men hvis du prøver å sette inn en post uten Fornavn feltet, vil databasen avvise det med en feilmelding:
ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).
2. PRIMÆR NØKKEL Begrensning
En KEY er et unikt attributt satt til en kolonne eller et felt som identifiserer en tabells tuppel (eller en post) i databasesystemer. En PRIMÆR NØKKEL-begrensning sikrer unikheten til verdier i en kolonne eller et sett med kolonner. Den fungerer som en unik identifikator i en rad, og forhindrer dupliserte poster i en databasetabell.
Primærnøkler inneholder unike verdier og kan ikke inneholde NULL-verdier. Hver SQL database tabell må bare ha én primærnøkkel. PRIMÆR NØKKEL kan ha én eller flere kolonner.
For eksempel oppretter du en database med kundeposter. Du trenger at hver kunde oppgir ID-nummeret sitt annerledes enn alle andre. Du kan bruke primærnøkkelbegrensningen for å sikre at ingen av kundene dine har samme ID-nummer.
Følgende kode viser hvordan du kan introdusere en primærnøkkelbegrensning 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 akseptere denne verdien hvis en bruker legger inn en annen post med en lignende ID. I stedet vil det gi en feil som indikerer duplisering. Brukeren prøver å sette inn 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 feilmelding:
Duplicate entry '1' for key 'PRIMARY'
Men hvis du endrer ID-en til den andre kunden, godtar databasen oppføringen. Derfor sikrer primærnøkkelen ingen dupliserte ID-er i kunderegistrene dine.
3. UTENLANDSKE NØKKEL-begrensning
Fremmednøkler etablere relasjoner mellom to tabeller. Du kan legge til en fremmednøkkel til et felt/kolonne i en tabell som refererer til primærnøkkelen i en annen tabell.
Tabellen med primærnøkkelen er den overordnede tabellen, mens tabellen med fremmednøkkelen er den underordnede tabellen. En post kan da ikke eksistere i den underordnede tabellen uten en referanse til den overordnede tabellen.
Fremmednøkkelbegrensningen forhindrer handlinger som vil ødelegge koblinger mellom tabeller. For eksempel kan du ikke MISTE en tabell hvis den kobles til en annen med en fremmednøkkel. Du må slippe begge bordene samtidig.
I motsetning til en primærnøkkel, kan du duplisere en fremmednøkkel og ha mer enn én i en enkelt tabell. Fremmednøkkelverdier kan også være NULL. I følgende eksempel må du bruke Kunde ID for å opprette 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 å opprette en ordre uten en eksisterende Kunde ID, viser databasen en feilmelding:
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 begrensning
Denne begrensningen sikrer at ikke to rader kan ha de samme verdiene for en bestemt kolonne. I likhet med primærnøkler opprettholder en unik begrensning dataintegriteten og forhindrer dupliserte oppføringer. Hvis du jobber med en dårlig utformet database uten den UNIKE begrensningen, kan du ende opp med å måtte finne og slette duplikatene.
I motsetning til primærnøkler, kan du ha mange UNIKE begrensninger på en tabell. For eksempel når du oppretter en Kunder tabell, kan det være lurt å ha unike IDer og telefonnumre. For å legge til en slik begrensning ved å bruke MySQL-server, bruk denne syntaksen:
CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Setter du inn poster med samme mobilnummer i databasen vil det da vise en feilmelding.
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );
Feilmeldingen vil være omtrent slik:
Duplicate entry '254000000' for key 'Mobile_No'
Denne UNIKE begrensningen sikrer at databasen ikke vil ha kunder med samme ID eller mobilnumre.
5. SJEKK begrensning
CHECK-begrensningen begrenser verdiområdet i en kolonne. Å legge til en CHECK-begrensning på en kolonne vil kun tillate spesifiserte verdier for den kolonnen. Det håndhever dataintegritet ved å sikre at en bruker bare setter inn gyldige data i en tabell.
CHECK-begrensningen må evaluere en verdi som TRUE eller UKJENT for hver spesifisert rad eller tabelloppføring. Hvis verdien er FALSE, viser databasen en feilmelding.
For eksempel, i Kunder-tabellen, vil du kanskje bare betjene kunder over 18 år. Du kan legge til en CHECK-begrensning for å sikre at du ikke betjener mindreårige kunder. Du kan legge til begrensningen 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
);
Nå hvis du prøver å sette inn en kundes alder under 18 år:
INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );
Databasen vil vise en feilmelding som denne:
ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)
Hvordan legge til og fjerne SQL-begrensninger fra databaser
SQL-begrensninger er ikke støpt i stein. Du kan legge til eller fjerne begrensninger på eksisterende tabeller ved å bruke ALTER TABLE-setningen. ALTER-setningen lar deg jobbe med begrensninger for å passe dine databehov.
Det er mange flere SQL-begrensninger du kan lære for å designe en database etter din smak. Du kan starte med de som er oppført i denne artikkelen.