Avatar billede semiprofkode Nybegynder
10. november 2005 - 14:17 Der er 9 kommentarer

keys og referencer

1. Kan jeg bruge en nøgle til at referere til en anden tabel, på en sådan måde, at det er lettere at slette utilknyttede records i denne ?

2. Hvordan kan man ellers slette utilknyttede records (nemt og hurtigt) ?
Avatar billede bromer Nybegynder
10. november 2005 - 14:22 #1
Jeg mener at du med innoDB (eller bare generelt i MySQL 5) kan lave FK. Det vil sige du kan lave følgende tabeller:

create table user (
user_id int,
blah text
);

create talbe user_logins (
login_id int,
user_id int REFERENCES user(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
login timestamp
);

Når du så sletter en bruger fra user tabellen ved DBMS'et at der er en afhængighed i user_logins tabellen og undersøger ON DELETE reglen. Hvis denne ikke er angivet melder DBMS'et en fejl tilbage. Hvis ON DELETE er sat til CASCADE bliver rækkerne i user_logins der har samme user_id fjernet.

Det er meget meget dejligt at arbejde med når man er blevet vant til det.
Avatar billede semiprofkode Nybegynder
10. november 2005 - 14:49 #2
jeg bruger mySQL 4.0.14 og MyIsam tables. MySQL control center som editor. Det lyder smart, men hvorfor ikke nøgler ?
Avatar billede bromer Nybegynder
10. november 2005 - 14:54 #3
Hvad mener du med nøgler. Det hedder Foreign Keys, så det har noget med nøgler at gøre. Jeg mener du skal bruge innoDB før du får denne feature, så det vil jeg anbefale at du gør.
Avatar billede semiprofkode Nybegynder
10. november 2005 - 15:55 #4
Din kode godtages af editoren, men manualen siger at reference kun har effekt for innoDB. Jeg kan ikke lave det om til innoDB uden at vide hvad det indebærer. Jeg ville frygtelig gerne vide hvad man kan bruge en foreign key til i denne sammenhæng.
Avatar billede bromer Nybegynder
10. november 2005 - 15:58 #5
En foreign key sørger for at der er overensstemmelse mellem to kolonner der indeholder samme værdi. I mit eksempel betyder det at du ikke for lov til at indsætte en række i user_logins, hvis ikke user_id kolonnen eksisterer i user tabellen. NULL er dog en undtagelser altså efter om user_id er sat til at kunne indeholde NULL.
Avatar billede semiprofkode Nybegynder
10. november 2005 - 16:09 #6
ok, hvis jeg forbinder to tabellers emneid med foreign keys (ID i emne og emneID i opringinging), bliver opringingen så slettet automatisk hvis jeg sletter et emne ?
Avatar billede bromer Nybegynder
10. november 2005 - 16:13 #7
ja, hvis du bruger innoDB.
Avatar billede semiprofkode Nybegynder
10. november 2005 - 16:23 #8
okay, hvorfor virker alt kun i innoDB? Hvad sker der hvis jeg skifter? Det lyder farligt når nu jeg har 200000 emner i to forskellige databaser
Avatar billede bromer Nybegynder
10. november 2005 - 16:26 #9
Så vidt jeg husker er det fordi MyISAM folkene kun tænker på performence og det er ikke sjovt at gøre i længden :)

Jeg har ikke personlig erfaring med at foretage et skift så det vil jeg helst ikke udtale mig om. Måske der er klogere og mere erfarne folk, der vil..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester