Om jag förstått "ON UPDATE CASCADE" rätt så uppdaterar den värdet i Child tabellens column om Parent tabellen columnen ändras?... men då frågar jag mig... då måste ju den relationen relatera till en icke primärnyckel alltså en helt vanlig kolumn? eftersom annars är den ju värdelös, för ett autoincrement primary ID ändrar ju aldrig sitt värde. Och då undrar jag.. vem relaterar till vanliga columner?. jag skulle aldrig relatera till något annat än autoincrement primary ID:s, allra minst en char column det skulle vara för riskabelt. Eller nån som kan klargöra lite kanske?. :bire
ON UPDATE CASCADE
5 svar · 328 visningar · startad av Nöff
Förstår inte riktigt vad du menar men har själv hållt på med Foreign keys det senaste.
Exempel...
Säg att du har en tabell som heter author och innehåller en himla massa information om en författare, exempelvis namn, födelsdatum osv.
Sedan har du en tabell som heter books. I denna tabell kan en/flera författare ha skriv en himla massa böcker. Tabellen kan även den ha ett attribut för författarnamn exempelvis authorName som är en foreign key till namn i författartabellen. Skulle du händelsevis vilja ändra författarnamnet i tabellen författare så ändras samtliga foreign key attribut där författarnamnet ifråga finns i tabellen böcker.
ON update cascade och ON update delete används tillsammans med foreign keys för att undvika anomalier.
Författarnamnet ska inte finnas i boktabellen, men jag förstår att det var exemplet du var ute efter. ;)
Du förstod mitt exempel iallafall :e
Sedan har du en tabell som heter books. I denna tabell kan en/flera författare ha skriv en himla massa böcker. Tabellen kan även den ha ett attribut för författarnamn exempelvis authorName som är en foreign key till namn i författartabellen. Skulle du händelsevis vilja ändra författarnamnet i tabellen författare så ändras samtliga foreign key attribut där författarnamnet ifråga finns i tabellen böcker.
Jepps, det är detta som jag tycker är ett generalfel att relatera till en char column och inte ett primary key autoincrement ID.
Hade jag gjort databasen ovan hade jag gjort såhär:
Author (ID,name)
Books (ID,authorID,name, FOREIGN KEY authorID REFERENCES Author(ID))
För att ändrar jag nu nåt i Author kommer alla Authors som relateras i Books att ändras. Och då behövs ingen ON UPDATE CASCADE... Jag kan inte se någon fördel med att ange ett ON UPDATE CASCADE , det bör ju också bli extremt processorkrävande om man har ett par miljoner rader i Books tabellen, Och relatera till en char och inte ett primary key autoincrement känns riskabelt. Eller finns det några fördelar som jag inte vet om?.
* felpost *