Din data är bara bra om du kan lita på den. Använd databasbegränsningar för att säkerställa att den är korrekt, tillförlitlig och inte bryter mot din datamodell.

Viktiga takeaways

  • Använd SQL-begränsningar för att upprätthålla dataintegritet och säkerställa enhetlighet i din databas. NOT NULL-begränsningen tvingar kolumner att avvisa NULL-värden.
  • Implementera primärnyckelbegränsningar för att säkerställa unika värden i en kolumn eller uppsättning kolumner. Detta förhindrar dubbletter av poster i en databastabell.
  • Utländska nyckelbegränsningar etablerar relationer mellan tabeller och förhindrar åtgärder som skulle förstöra länkar mellan dem. De säkerställer att en post i den underordnade tabellen refererar till den överordnade tabellen.

En databas är avgörande för många applikationer, men det kan bli rörigt om du inte har riktlinjer för lagring och bearbetning av data.

SQL-begränsningar anger regler för lagring av data i en tabell. När du ställer in begränsningar kommer databasen att ge ett felmeddelande om du försöker lagra data som bryter mot dessa regler. Restriktioner hjälper till att upprätthålla dataintegritet och säkerställa enhetlighet i din databas.

instagram viewer

Det finns flera typer av SQL-begränsningar som du kan använda; här är några av de mest användbara.

1. NOT NULL Begränsning

Databaskolumner accepterar som standard data med NULL-värden. NULL betyder i huvudsak att inget värde existerar. NOT NULL-begränsningen tvingar en kolumn att avvisa NULL-värden.

Denna begränsning säkerställer att varje kolumn måste innehålla ett värde. Du kan inte lägga till en post i databasen utan att tillhandahålla data för några kolumner med NOT NULL-begränsningen.

Ta exemplet med en Kunder tabell. Det finns några nödvändiga detaljer om varje kund som du vill ha registrerat, som deras namn. Lägg till NOT NULL-begränsningen i de obligatoriska fälten för att säkerställa att kunder tillhandahåller denna information.

Här är ett exempel som visar hur du kan använda NOT NULL-begränsningen i en PostgreSQL-databas:

CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);

Om du försöker infoga en kundpost utan att Ålder fältet kommer databasen att acceptera det utan fel:

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);

Men om du försöker infoga en post utan Förnamn fältet kommer databasen att avvisa det med ett felmeddelande:

ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).

2. PRIMÄR NYCKEL Begränsning

En KEY är ett unikt attribut satt till en kolumn eller ett fält som identifierar en tabells tupel (eller en post) i databassystem. En PRIMARY KEY-begränsning säkerställer att värdena är unika i en kolumn eller uppsättning kolumner. Den fungerar som en unik identifierare i en rad och förhindrar dubbletter av poster i en databastabell.

Primära nycklar innehåller unika värden och kan inte innehålla NULL-värden. Varje SQL-databastabell måste bara ha en primärnyckel. PRIMARY KEY kan ha en eller flera kolumner.

Till exempel skapar du en databas med kundregister. Du behöver varje kund att ange sina ID-nummer på ett annat sätt än alla andra. Du kan tillämpa den primära nyckelbegränsningen för att säkerställa att ingen av dina kunder har samma ID-nummer.

Följande kod visar hur du kan införa en primärnyckelbegränsning i en MySQL-databas:

CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);

Databasen accepterar inte det värdet om en användare anger en annan post med ett liknande ID. Istället kommer det att skicka ett fel som indikerar duplicering. Användaren försöker infoga två poster med samma ID i följande exempel:

INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );

INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );

Databasen kommer att visa ett felmeddelande:

Duplicate entry '1' for key 'PRIMARY'

Men om du ändrar ID för den andra kunden, accepterar databasen posten. Därför säkerställer den primära nyckeln inga dubbletter av ID i dina kundregister.

3. UTLÄNDSK NYCKEL Begränsning

Främmande nycklar upprätta relationer mellan två tabeller. Du kan lägga till en främmande nyckel till ett fält/kolumn i en tabell som refererar till primärnyckeln i en annan tabell.

Tabellen med primärnyckeln är den överordnade tabellen, medan tabellen med den främmande nyckeln är den underordnade tabellen. En post kan då inte existera i den underordnade tabellen utan en referens till den överordnade tabellen.

Den främmande nyckeln förhindrar åtgärder som skulle förstöra länkar mellan tabeller. Du kan till exempel inte SLÄPPA en tabell om den länkar till en annan med en främmande nyckel. Du måste släppa båda borden samtidigt.

Till skillnad från en primärnyckel kan du duplicera en främmande nyckel och ha mer än en i en enda tabell. Utländska nyckelvärden kan också vara NULL. I följande exempel måste du använda Kundnummer för att skapa en beställning.

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');

Om du försöker skapa en beställning utan en befintlig Kundnummer, visar databasen ett felmeddelande:

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

Denna begränsning säkerställer att inga två rader kan ha samma värden för en specifik kolumn. Precis som primärnycklar upprätthåller en unik begränsning dataintegriteten och förhindrar dubbletter av poster. Om du arbetar med en dåligt utformad databas utan den UNIKA begränsningen kan du behöva göra det hitta och ta bort dubbletterna.

Till skillnad från primärnycklar kan du ha många UNIKA begränsningar på en tabell. Till exempel när du skapar en Kunder tabell, kanske du vill ha unika ID och telefonnummer. För att lägga till en sådan begränsning med MySQL-server, använd denna syntax:

CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);

Om du infogar poster med samma mobilnummer i databasen kommer det då att visa ett felmeddelande.

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );

Felmeddelandet blir ungefär så här:

Duplicate entry '254000000' for key 'Mobile_No'

Denna UNIKA begränsning säkerställer att databasen inte kommer att ha kunder med samma ID eller mobilnummer.

5. KONTROLLERA begränsning

CHECK-begränsningen begränsar värdeintervallet i en kolumn. Om du lägger till en CHECK-begränsning på en kolumn tillåts endast specificerade värden för den kolumnen. Det upprätthåller dataintegritet genom att säkerställa att en användare endast infogar giltiga data i en tabell.

CHECK-begränsningen måste utvärdera ett värde som TRUE eller OKÄNT för varje angiven rad eller tabellpost. Om värdet är FALSE visar databasen ett felmeddelande.

I tabellen Kunder kanske du till exempel bara vill betjäna kunder över 18 år. Du kan lägga till en CHECK-begränsning för att säkerställa att du inte betjänar minderåriga kunder. Du kan lägga till begränsningen i en PostgreSQL-databas, som visas i följande kod:

CREATETABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);

Om du nu försöker infoga en kunds ålder under 18 år:

INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );

Databasen kommer att visa ett felmeddelande så här:

ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)

Hur man lägger till och tar bort SQL-begränsningar från databaser

SQL-begränsningar är inte gjutna i sten. Du kan lägga till eller ta bort begränsningar på befintliga tabeller med ALTER TABLE-satsen. ALTER-satsen låter dig arbeta med begränsningar för att passa dina databehov.

Det finns många fler SQL-begränsningar du kan lära dig för att designa en databas efter din smak. Du kan börja med de som anges i den här artikeln.