Den sistnämnda är helt klart elegantast.
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