Avatar billede x-guy Nybegynder
29. august 2006 - 10:39 Der er 7 kommentarer og
1 løsning

Hjælp til design - hvilken løsning er bedst?

Først vil jeg lige beklage titlen, men at koge mit problem ned til en kort sætning er ikke lige så nemt ;)

Jeg er i gang med at designe en større database, og jeg har en del værdier hvor på der skal være en deadline, status mm. på hver enkelt.

Sådan som jeg ser det har jeg to muligheder, hvoraf en ene er besværlig at lave, og en nemmere (i hvert fald hurtigere) løsning, men hvor jeg er meget i tvivl om det designmæssigt er i orden.

Som jeg nævnte har jeg en række værdier der skal ind, og hver enkelt har noget tilhørende info, som fx deadline for udfyldelse af værdien osv.

Løsning 1:
----------
Tabel: Datalinier
Felter:
Isp
IspDeadline
IspVisDeadline
IspStatus
IspSynlig
DownloadHastighed
DownloadHastighedDeadline
DownloadHastighedVisDeadline
DownloadHastighedStatus
DownloadHastighedSynlig
UploadHastighed
UploadHastighedDeadline
UploadHastighedVisDeadline
UploadHastighedStatus
UploadHastighedSynlig
...

Så her har jeg altså Isp, Downloadhastighed og UploadHastighed, hver med info omkring deadline, status mm.

Det trælse er at der er MANGE af denne slags gentagelser, og der er mange tabeller.


Løsning 2:
----------
Tabel: Datalinier
Felter:
Isp
IspInfoID
Downloadhastighed
DownloadhastighedInfoID
UploadHastighed
UploadHastighedInfoID
...

Her er antallet af felter kraftigt reduceret.
Ideen er at (navn)InfoID feltet er en reference til en række i en anden tabel som så ser sådan ud:

Tabel: Info
Felter:
Deadline
VisDeadline
Status
Synlig

For mig at se er det en noget lettere løsning.
Nu er spørgsmålet bare om det er godt database design?
Findes der evt en bedre løsning?
Avatar billede teepee Nybegynder
29. august 2006 - 12:17 #1
Hvordan bruger du data? eksempelvis vil forskeligge opslag i den første udgave kræve flere forskellige indexes, hvor den anden løsning kan du benytte samme indexes uanset typen af oplsag. Men hvis du alligevel benytter alle data på én gang hvergang så kan du sagtens holde dig til den første løsning. Hvis du skal bruge indexes på mange af kolonnerne i første løsning vil inserts/updates jo tage længere tid, men det ved jeg ikke om det har nogen betydning for dig? du kan jo evt. placere data "pænt" i din anden løsning og dernæste lave et view der viser dig data i layout tilsvarende din første løsning.
Avatar billede arne_v Ekspert
29. august 2006 - 13:35 #2
Jeg mener klart at nummer 2 lyder bedst.

Udfra din beskrivelse så er det den som modellerer virkeligheden.

Nummer 1 har sådan en snert af noget unormaliseret over sig.
Avatar billede x-guy Nybegynder
29. august 2006 - 14:49 #3
Okay, nu har jeg faktisk aldrig rigtig arbejdet med views før.
Hvordan laver jeg det smartest med løsning nr 2, et view til hver ting (isp, downloadhastighed osv) eller et samlet view for det hele?
Avatar billede teepee Nybegynder
29. august 2006 - 15:01 #4
Hvis du danner to tabeller i stedet for én skal du sådan set bare left outer joine info tabellen tre gange på datalinier tabellen. Jeg skal lige se om jeg ikke får tid senere til at komme med et eksempel, hvis ikke en anden har svaret inden...
Avatar billede x-guy Nybegynder
29. august 2006 - 15:10 #5
Noget i den stil her?

SELECT

D.Isp,
I.Deadline AS IspDeadline,
I.VisDeadline AS IspVisDeadline,
I.Afsluttet AS IspAfsluttet,
I.Ansvar AS IspAnsvar,
I.Status AS IspStatus,
I.Synlig AS IspSynlig,

D.DownloadHastighed,
I1.Deadline AS DownloadHastighedDeadline,
I1.VisDeadline AS DownloadHastighedVisDeadline,
I1.Afsluttet AS DownloadHastighedAfsluttet,
I1.Ansvar AS DownloadHastighedAnsvar,
I1.Status AS DownloadHastighedStatus,
I1.Synlig AS DownloadHastighedSynlig

FROM tblDatalinier AS D

LEFT JOIN tblDataInfo AS I
ON I.ID = D.IspInfoID

LEFT JOIN tblDataInfo AS I1
ON I1.ID = DownloadHastighedInfoID
Avatar billede teepee Nybegynder
30. august 2006 - 09:26 #6
Yep, så smider du bare det ind i en view definition og så er du kørende
Avatar billede x-guy Nybegynder
30. august 2006 - 10:26 #7
Cool :)
Smid et svar...
Avatar billede teepee Nybegynder
30. august 2006 - 10:34 #8
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