webForumDet fria alternativet

lite frågor om relationer och foreign key

7 svar · 227 visningar · startad av Nöff

NöffMedlem sedan nov. 2003569 inlägg
#1

men tjenare :D

tabell1:
namn varchar
efternamn varchar
adress varchar

tabell2:
namn varchar REFERENCES FOREIGN KEY tabell1(namn)
bestallda varor varchar

lite pseudokod för att illustrera...

jaja, men hursomehelst.
om jag har en person i tabell1 som heter olle, och sen lägger in olle i tabell 2, så att dessa får en relation... alles gut så långt... MEN!!!, om jag lägger till en till olle i tabell1, och efter detta raderar den första olle i tabell2, teoretiskt är ju nu inte FOREIGN KEY:n bruten eftersom det faktiskt finns en olle i tabell1 som olle i tabell2 kan relatera till, men de är "egentligen" inte samma olle... Kommer MS-SQL-servern reagera över detta och kasta ett exception, eller kommer den lugnt jobba på??.

@ndersMedlem sedan juni 200032 969 inlägg
#2

Du borde sätta foreign keys mot ID-fältet, och inte mot ett fält med något godtyckligt namn i.

NöffMedlem sedan nov. 2003569 inlägg
#3

Jo det gör jag för det mesta, men jag har en tabell där jag måste göra på ett annorlunda sätt.

UlfTMedlem sedan maj 20018 027 inlägg
#4

Jag skulle gissa att sql-servern reagerar endast om du i tabell1 definierar namn som primary key, vilket du bör göra om du vill referera till just namn-kolumnen. Men egentligen är det en dålig idé att basera dessa relationer på namn-kolumner, just därför att det kan finnas flera Olle.

NöffMedlem sedan nov. 2003569 inlägg
#5

OK, så SQL-servern´s FOREIGN KEY baseras inte på något identiskt värde utan bara det existerar ett likadant värde i parent tabellen så är allt frid och fröjd.

UlfTMedlem sedan maj 20018 027 inlägg
#6

Som sagt, det är en gissning, eftersom det är primary key-villkoret som brukar förbjuda en att ha samma kolumnvärde i flera poster. Men om det är frid och fröjd, vet jag inte. Om du har två kunder vid namn Olle, vill du då att båda dessa kunder ska stå registrerade på exakt samma beställning? Jag kan tänka mig att Olle nr 2 blir rätt sur när han får hem en beställning varor som Olle nr 1 har beställt.

LarsGMedlem sedan dec. 200012 464 inlägg
#7

En foreign key kan bara referera en primary key eller ett unique constraint så du kan aldrig ha 2 stycken olle i tabell1. Så grunden för ditt resonemnag finns inte.

NöffMedlem sedan nov. 2003569 inlägg
#8

Aah, ok ok , då förstår jag, och en primary key blir ju automatiskt UNIQUE

130 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)