27. oktober 2014 - 10:24Der er
9 kommentarer og 1 løsning
SQL, server 2008, konstruktion af DB
Hej
Jeg sidder lidt med noget jeg tro der er noget bøvl - Det handler om relations regler ift. når man opretter en Database(er stadigvæk studerende) altså nå man skal omdanne de her multipliciteter til en relationel model
Spørgsmål:
Jeg sidder med en database, hvor nogle af tabellerne skal have muligheden for at skrive en kommentar, MEN det der er min største hovedepine er om jeg har gjort det korrekt - eller om der er en bedre måde ift. normalisering.
Forklaring:
jeg har følgende tabeller [Sample], [SubSample], [afdeling1], [afdeling2] alle disse skal have mulighed for at skrive en kommentar til, men det er ikke kun en 1 til 1 relation, det er en 1 til mange relation; altså [Sample] kan have 1 til mange kommentar og lige så med de efterfølgende.
Hvordan skal jeg, på bedst muligvis gør det i min Database? -- pt er min løsning( som nok er langt fra den bedste, at lave 1 samlet tabel [Commentary] også lavet samlingstabeller for de 4 tidligere nævnte.
Simpelthen tage ID fra de enkelte tabeller og sætte på som FK i [Commentary] - Men det vil jo skabe en helt masse null værdier i [Commentary] tabellen, så den hoppede jeg fra igen.
EDIT: 1.1 Når det så er lavet som det er med samlingstabeller mellem [Commentary] og de 4 før nævnte tabeller [Sample], [SubSample], [afdeling1], [afdeling2] Så er jeg meget i tvivl om hvordan jeg skal gør i min kode (C#).
Hvis jeg skal indsætte en ny sample med en kommentar.
så skal jeg jo vel reelt have fat i alle 3 tabeller, når jeg konstruere mit insert statement?
Jeg ville umiddelbart bruge en uniqueidentifier (uid) som fremmednøgle i kommentar-tabellen (dvs. sample, subsample, afdeling1 og afdeling2 skal have uid som primærnøgle).
Når så f.eks. sample skal hentes med kommentarer, kunne der laves et opslag på sample med uid og samtidig (måske endda parallelt) et opslag i kommentar-tabellen på samme uid. Altså ingen relationstabeller mellem kommentar-tabellen og de 4 primærtabeller.
Det er givetvis ikke en relationel normaliseringsmæssig optimal løsning, men jeg synes den er praktisk.
Dog skal du selv sørge for, at der bliver ryddet op i kommentar-tabellen, når rækker slettes i de 4 primærtabeller, da databasens indbyggede relationelle integritetsmekanisme ikke kan gøre dette automatisk med denne konstruktion.
Softspots UUID/GUID loesning er faktisk en optimering af C.
I stedetfor at brugen en id tabel til at generere faelles id'er saa bruger man en uuid/guid.
Der findes forskellige varianter af uuid/guid men en saakaldt type 4 som er langt den mest brugte har en meget lille sandsynlighed for at give duplikater.
Jeg valgte at køre med A, sådan at kommentar tabellen CX har en foreign key fra den tilhørende tabel X og lige så med de følgende.
Var det også sådan du havde det tænkt ?
Men efter selv at have læst angående det at ligge multiple INSERT ind i en transaction - kan kun se store fordele i at have 2 inserts i 1 transaction ift. at skal kører 2 insert seperat.
Men jeg har aldrig brugt transactions, så er i tvivl om hvordan koden skal se ud, ud fra de eksempler jeg har set, efter at have kigget på det - så det jeg er i tvivl om er hvordan det fungere og ser ud med den sqlcommandList
Begge INSERT bliver tilknyttet den samme transaktion, hvilket goer at ente saa udfoeres de begge eller saa udfoeres ingen af dem - d.v.s. du risikerer ikke at kun en af dem bliver udfoert.
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.