Effektiv databaseopbygning

Tags:    php

Hej udviklere.

Jeg er ved at opbygge en handelsdatabase, som skal håndtere handler for kunder gjort af systembrugere.
Databasen skal være meget modificerbar, og bygges op således at det ikke er besværligt at videreudvikle den.

Jeg er dog kommet i tvivl om, hvor vidt opdelingen af data i forskellige tabeller vil få indflydelse på effektiviteten, når det er nødvendigt at gennemløbe flere tabeller for at nå en information.

Følgende er et eksempel på en simplificeret bid af databasestrukturen:
Fold kodeboks ind/udKode 

Mit problem opstår så, når jeg skal hente simple informationer. I nogle tilfælde må jeg da "gennemløbe" flere tabeller for at nå denne.

Hvis jeg f.eks. gerne vise en handel med følgende informationer:
Fold kodeboks ind/udKode 

For at udskrive sælgerens titel lokaliseres den altså i databasen ved:

  1. Sælgerens findes, hans ID fremgår i handlen.

  2. Sælgerens data læses. Titlen fremgår som et ID.

  3. Navnet på titlen findes i tredje tabel, ved at søge på ID.



For mig lyder det en anelse nonsens at skulle igennem alle de besværlige queries, for at vise så simple informationer.
Men er det nødvendigt, hvis systemet skal være dynamisk? Således at hvis en navnet på en titel ændres, skal den ikke ændres i alle handler og for alle sælgere.

Jeg håber at minoriteten forstod problemstillingen :)



Indlæg senest redigeret d. 20.09.2008 13:31 af Bruger #6493
6 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Hver enkel customer skal have et ID som du allerede har gjort.

Det du så skal tilføje i de andre tabbeller er en række ved navn "CustomerId" el. lign. som skal indeholde brugerens (customers) id. Så kan du ved hjælp af CustomerId finde frem til fx titel.



Jeg tror du er ude efter JOIN. Med den kan du trække relaterede informationer ud af flere tabeller på en gang.

F.eks.
Fold kodeboks ind/udKode 


Så vil du få navnet på din kunde, som er knyttet til sale.id=1, istedetfor bare kundens id.





Hver enkel customer skal have et ID som du allerede har gjort.

Det du så skal tilføje i de andre tabbeller er en række ved navn "CustomerId" el. lign. som skal indeholde brugerens (customers) id. Så kan du ved hjælp af CustomerId finde frem til fx titel.

Tak for dit hurtige svar :)

Jeg er klar over, at tabellerne sammenknyttes ved at referere til hinandens indhold på ID. Men vil der da ske et performance-tab, når det er nødvendigt at "finde frem" til informationen ved at gennemløbe flere tabeller.

Jeg har ændret trådens eksempel til at være en anelse mere pædagogisk med brug af customerID, titleId osv.



Jeg tror du er ude efter JOIN. Med den kan du trække relaterede informationer ud af flere tabeller på en gang.

F.eks.
Fold kodeboks ind/udKode 


Så vil du få navnet på din kunde, som er knyttet til sale.id=1, istedetfor bare kundens id.


Tak, Brian. Det lader til at JOIN er min løsning.
Med den metode vil jeg kunne hente informationer fra flere tabeller i ét kald.

Til andre der måtte være interesseret er JOIN metoden beskrevet her http://www.w3schools.com/Sql/sql_join.asp



Ja god løsning med JOIN!

Men er det ikke (BTW.) en ret dårlig løsning at lave to tabbeller som du gør? Du kunne jo sagtens have titel i samme tabel som customer...



Det kunne jeg godt, men så muligheden for at ændre og tilføje titler vel blive indskrænket?

Hvis nu f.eks. 200 sælgere har den samme titel, og chefen ønsker titlen omdøbt, så skal titlen ændres i 200 sælgeres rækker.

Vil det derfor ikke være mere fornuftigt med en anden tabel?



t