Avatar billede superdude Nybegynder
28. januar 2007 - 16:30 Der er 5 kommentarer og
1 løsning

Design spørgsmål - best practice

Mit spørgsmål går på hvordan jeg bedst designer min database således at jeg uafhængigt af GUI/input-validerende applikationer kan håndhæve "data-regler" for data i min database.

Jeg vil så vidt muligt undgå at bruge triggers, og primært lade relationer bestemme hvilke data der er "lovlige".

Her er et fiktivt eksempel på min problemstilling:

Jeg har en tabel "Biler" der indeholder stamdata for biler, eksempelvis registreringsnummer og farve. "Biler" indeholder også en fremmednøgle til tabellen "Bilmærker" som indeholder rækker med værdierne "Opel", "Ford" og "Limousine".

Det er i min mini-verden underforstået at en bil har 4 hjul, medmindre bilen er af typen "Limousine", som kan have 4 eller 6 hjul.

Hvis jeg i tabellen "Biler" laver et felt der hedder "AntalHjul" vil det være muligt at have en Ford eller en Opel med 6 hjul.

Hvis jeg laver en ny tabel der er en klon af "Biler" og kalder den "Limousiner", kan jeg tilføje "AntalHjul" feltet til denne tabel alene, og det vil umiddelbart løse mit problem. Men det er jo ikke nogen køn løsning - det vil kræve en ny tabel når der kommer en biltype med 8 hjul o.s.v.

Jeg kan selvfølgelig validere data via triggers og de stored procedures der indsætter/opdaterer data, således at man ikke indsætter typen "Opel" og 6 hjul til samme række, men findes der en måde at løse problemstillingen på rent designmæssigt, således at det også vil fungere for databaser der ikke tilbyder triggers/stored procedures?
Avatar billede arne_v Ekspert
28. januar 2007 - 18:45 #1
hvad med en FK af type og antal hjul som peger på en anden tabel med

almindelig 4
limousine  4
limousine  6
Avatar billede superdude Nybegynder
28. januar 2007 - 19:12 #2
Ja, det ville være en god løsning på det fiktive problem jeg fik beskrevet, men hvis vi antager at limousinerne kan have et hvilken som helst antal hjul (hvilket afspejler mit virkelige problem), vil det kræve:

limousine 1
limousine 2
limousine 3
limousine n

...og resultere i uendeligt mange rækker.

Men da du svarede på det spørgsmål jeg stillede vil jeg gerne give dig point hvis du smider et svar ;-)
Avatar billede arne_v Ekspert
28. januar 2007 - 23:01 #3
så ville jeg satse på trigger

og hvis databasen ikke understøtter det, så må applikationen være eneansvarlig for det
Avatar billede superdude Nybegynder
29. januar 2007 - 16:25 #4
Godt. Jeg ville bare lige sikre mig at der ikke findes et helt elementært design pattern som jeg ikke kender til eller at jeg har overset. Smid et svar.
Avatar billede arne_v Ekspert
29. januar 2007 - 17:00 #5
ikke et jeg kender ihvertfald
Avatar billede arne_v Ekspert
29. januar 2007 - 17:00 #6
og et svar
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