webForumDet fria alternativet

Skapa främmande nyckel (best practises)

Databaser & SQL

1 svar · 694 visningar · startad av krimz

Medlem sedan sep. 20091 inlägg
Frågan#1

Hej.

Jag håller på och försöker lära mig SQL och något som slagit mig är hur inkonsekventa många är när dom skapar främmande nycklar i sina tabeller. Här några varianter som jag har stött på:

Exempel 1:

CREATE TABLE Customers (
   id INTEGER NOT NULL PRIMARY KEY,
   ...
);

CREATE TABLE Orders (
   id INTEGER NOT NULL PRIMARY KEY,
   customer_id INTEGER NOT NULL,
   ...
   FOREIGN KEY (customer_id) REFERENCES Customers(id)
);

Exempel 2:

CREATE TABLE Customers (
   id INTEGER NOT NULL PRIMARY KEY,
   ...
);

CREATE TABLE Orders (
   id INTEGER NOT NULL PRIMARY KEY,
   customer_id INTEGER NOT NULL,
   ...
);

ALTER TABLE Orders
ADD FOREIGN KEY (customer_id) REFERENCES Customers(id);

Exempel 3:

CREATE TABLE Customers (
   id INTEGER NOT NULL PRIMARY KEY,
   ...
);

CREATE TABLE Orders (
   id INTEGER NOT NULL PRIMARY KEY,
   customer_id INTEGER NOT NULL,
   ...
);

ALTER TABLE Orders
ADD CONSTRAINT customer_fk FOREIGN KEY (customer_id) REFERENCES Customers(id);

De här olika metoderna för att skapa främmande nycklar blandas friskt i olika tutorials på nätet och jag har t.o.m. sett ett exempel där en person använder alla tre sätten i samma sql-schema utan att närmare kommentera saken. Vad är det för något jag missar? Är det upp till en själv vilken metod man vill använda eller är syftet bakom de olika metoderna att lösa specifika problem? Hur gör ni själva?

(Trevligt forum förresten!)

Medlem sedan maj 2000144 inlägg
#2

Intressant frågeställning.
Det är ju lite skillnad på 1,2 mot 3:an.

3:an skapar en namngiven foreign key.

Namngivna relation kan vara användbart om man scriptar relationerna dynamiskt.

Anledningen till 2:an (och 3:an) skulle kunna vara att man skapar tabellerna och inte vill trassla med att skapa dem i rätt ordning.
Utan med 2:an (och 3:an) får man möjlighet att lägga till tabellerna i valfri ordning och därefter lägger man till relationerna.

Har man t.ex. två tabeller som refererar varandra så är det svårt bygga upp det förhållandet utan 2 & 3.

274 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
135 ms — ändringar (db)