Avatar billede thomasabcd Nybegynder
08. november 2006 - 09:58 Der er 9 kommentarer og
1 løsning

Arkitektur spm

På mange sites ser man, at man kan knytte en kommentar,tags og billeder til det, som sitet nu handler om. For eksemplets skyld så lad os antage, at det er et site om biler og motorcykler, og man kan knytte kommentarer, tags og billeder til disse biler og motorcykler.Er det så smartest at have en lang række tabeller a la cars, motorcycles, carTags, carPictures, carComments, motorcycleTags, motorcyclePictures etc. eller er det bedre at generalisere tingene, så biler og motorcykler er eksempelvis et item, så der findes itemTags, itemComments, itemPictures etc, og så lade idholdet af cars og motorcycles-tabellerne have en reference til et item?
Avatar billede teepee Nybegynder
08. november 2006 - 10:28 #1
Sidstnævnte, helt sikkert, så er du forberedt på lige pludselig at skulle vise scootere, cykler, luftskibe, helikoptere m.v. Det er du ikke med førstnævnte løsning
Avatar billede thomasabcd Nybegynder
08. november 2006 - 10:33 #2
Det regnede jeg også med. Er der nogle faldgruber, jeg skal være opmærksom på?
Avatar billede teepee Nybegynder
08. november 2006 - 11:35 #3
Det er svært at sige på forhånd. Er der noget som du selv tror vil skabe problemer. Skal du have filer/billeder i selve databasen? Vil du kunne lave context søgninger? Skal du replikere? Hvis ikke, så er det vist ikke de store hurdles. Husk, af performancehensyn, kan det godt betale sig at denormalisere en smule, men det afhænger af situationen.
Avatar billede thomasabcd Nybegynder
09. november 2006 - 12:08 #4
Nu har jeg arbejdet lidt videre med det. Jeg har nu en tabel kaldet Vehicles (som er den generaliserede tabel). Derudover har jeg forskellige tabeller som Cars, MotorCycles etc. Alle tabeller har selvfølgeligt en primær nøgle. Bør værdien af Cars', MotorCycles' etc primære nøgler være den samme som det tilsvarende Vehicle ID? Lige nu har hver række i Cars-tabellen dels et CarID (primær nøgle) og et VehicleID(fremmednøgle). Begge nøgler er unikke og begge nøgler dækker sådan set over det samme "objekt".
Avatar billede teepee Nybegynder
09. november 2006 - 12:39 #5
Hvorfor har du alle de tabeller Car, MortorCycles etc.? Er de fordi har har specifikke egenskaber som er specielle for dem? Der er som sådan ikke noget i vejen for at have 1-1 relationer, som det nok gør sig gældende her, men måske at du kunne bruge nogle feltbetegnelser der gør at du kan slippe af med de typeafhængige tabeller. Du kunne også lave en mange-mange relationstabel (vehicleproperties) mellem vehicles og properties, hvor du peger på en egenskab (længde, højde etc.) og et køretøj (cykel, bil, båd etc.), påført en værd (vehicle 1, property 5, value 7.21), men dette kan være meget tungt at fremsøge senere hen. dette betyder dog at du ikke skal ændre din datamodel når du tilføjer en ny type transportmidler.
Avatar billede thomasabcd Nybegynder
09. november 2006 - 12:55 #6
Jeg vil I så vid udstrækning som muligt lade alt centrere sig om Vehicles, men  en bil kan eksempelvis være sedan, stationcar etc, så der er nogle typespecifikke ting, hvilket er grunden til at jeg både en Vehicles og Cars, Motorcycles etc tabeller. For nemheds skyld ville det være rart, hvis både en given Car og dets tilsvarende Vehicle havde samme ID, så det er nemmere at referere til, men jeg ved ikke, om det er måden at gøre det på.
Avatar billede teepee Nybegynder
09. november 2006 - 14:26 #7
Det lyder for mig som om det er et 1-1 forhold, så brug Cars som primærnøgle og lav en foreign key reference og en primærnøgle i de øvrige tabeller som benytter samme værdier.
Avatar billede thomasabcd Nybegynder
09. november 2006 - 14:51 #8
Undskylder, at jeg skal have det pinnet så meget ud, men jeg vil godt have det helt på det rene:
Bare for at forstå det helt rigtigt. Der er en 1-1 relation. Vi har to tabeller Cars og Vehicles. Cars har to kolonner (CarID (primær nøgle) og VehicleID(foreign key)).  Vehicles har én kolonne (VehicleID (primær nøgle). Jeg ser to scenarier ud fra ovenstående.
1: Alle tre kolonner(Cars.CarID, foreign key Cars.VehicleID og Vehicles.VehicleID) har samme værdi.

2: Cars.CarID har én værdi. Cars.VehicleID og Vehicles.VehicleID har en anden (baseret på Vehicles.VehicleIDs værdi). 

Det er nr. 2, jeg skal bruge?
Avatar billede teepee Nybegynder
10. november 2006 - 09:11 #9
2 er det mest almindelige, men hvis det er en ægte 1-1 relation så skal du sådan set bare bruge Cars.VehicleId og Vehicles.VehicleId, du har ikke brug for en rigtig priæmærnøgle på Cars (CarId) da der jo ikke er dubletter i Cars.Vehicle id. Sæt evt. et unique index på denne kolonne.
Avatar billede thomasabcd Nybegynder
11. november 2006 - 01:03 #10
Tak for vejledningen
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