webForumDet fria alternativet

Förbättring av design

Webbutveckling

1 svar · 436 visningar · startad av MMats

Medlem sedan sep. 200061 inlägg
Frågan#1

Efter att fått frågan om min databasdesign verkligen är optimal och
efter att ha jobbat med den så börjar jag inse att den inte är det.
Frågan är vilken design som är att föredra istället.

Jag har ett antal produkter som ligger i olika mindre lådor. Dessa mindre lådor
ligger flera stycken i större lådor som i sin tur finns i olika rum.

 _______________________________________
|Hus                                    |
|    _________________________________  |
|   |Rum   _________________________  | |
|   |     | Stor  ________________  | | |
|   |     | låda |Liten           | | | |
|   |     |      |låda   _______  | | | |
|   |     |      |      |Produkt| | | | |
|   |     |      |       -------  | | | |
|   |     |       ----------------  | | |
|   |      -------------------------  | |
|    ---------------------------------  |
 ---------------------------------------

I den gamla designen jag hade hade produkten 4 stycken fält i sin tabell,
fldBuilding, fldRoom, fldBigBox, fldSmallBox.

Det medförde att jag vid varje nytillkommen produkt var tvungen att ta reda
på var varje låda befann sig. Det borde ju räcka med att ta reda på i vilken
liten låda man lagt den. Sedan borde ju den lilla lådan veta själv var den är.
Då finns det ju dessutom ingen risk att flera produkter säger att en låda befinner
sig på olika ställen.

Min tanke när det gäller den nya designen är att varje låda håller reda på sig själv.

dvs man har olika tabeller för lådorna och rumen som har relation med varandra.

    ______________
   |tblProdukt    |
   |--------------|
   |fldProduktID  |
   |fldProduktNamn|
   |fldSmallBox   |----
    --------------     |
    _______________    |
   |tblSmallBox    |   |
   |---------------|   |
   |fldSmallBoxID  |<--
   |fldSmallBoxName|
   |fldBigBox      |--
    ---------------   |
    _____________     |
   |tblBigBox    |    |
   |-------------|    |
   |fldBigBoxID  |<---
   |fldBigBoxName|
   |fldRoom      |--
    -------------   |
    ____________    |
   |tblRooms    |   |
   |------------|   |
   |fldRoomID   |<--
   |fldRoomName |
   |fldBuilding |------
    ------------       |
    _______________    |
   |tblBuildings   |   |
   |---------------|   |
   |fldBuildingID  |<--
   |fldBuildingName|
    ---------------

På det sättet blir det mindre dubbelt data i databasen och man behöver hålla reda på
mindre vid inmatning.

Men å andra sidan är det i princip samma typ av data man har i alla dessa tabeller
(utom tblProdukt) så det kanske vore bättre med en enda tabell som relaterar till sig själv?

    _________________    
   |tblLocations     |   
   |-----------------|   
   |fldLocationID    |
   |fldLocationName  |
   |fldParentLocation|
    -----------------

Vad tycker ni? Finns det kanske en design som är bättre?

Tack på förhand

MMats

Medlem sedan sep. 20001 124 inlägg
#2

Den sistnämnda är helt klart elegantast.

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)