[PHP/MySQL] Goede structuur

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • iH8
  • Registratie: December 2001
  • Laatst online: 17-06-2024
Stel ik heb een tabel met 4 kolommen; nummer, soort, prijs en omschrijving. Nu wil ik nog wat meer kolommen toevoegen maar ik heb per artikelsoort, een ander aantal kolommen nodig. Dat zou natuurlijk gewoon kunnen als ik gewoon het maximaal benodigde aanmaak in die tabel. Ik dacht dat ik dan tot met een boel lege cellen te kijken na verloop van tijd.

Die situatie lijkt me verre van optimaal, opsplitsen en tabellen maken per soort klinkt dan het meest logisch. Dan scheid ik echter ook nummer, prijs, omschrijving van elkaar, wat misschien bij het updaten van bv. de prijskolom niet handig is. Mocht je dan met 20 productsoorten komen te zitten dan heb je je prijzen verspreid staan over 20 tabellen. Nu heb ik ook zitten denken de soort-specifieke kolommen op te delen, in tabellen per soort. Dan ook het nummer meekopieeren om het artikel gekoppeld te houden met de hoofdtabel.

Ik heb zo al meerdere constructies op papier gehad. Mijn kennis van PHP/MySQL groeit gestaag maar over wat te doen in welke situatie, kan ik niets over vinden. Wat is wijs en wanneer. Ik weet zo onderhand precies elke functie te vinden die ik nodig heb maar hierover kan ik bar weinig vinden en als ik iets vind, dan is het niet echt geschreven voor iemand die geen hi of bi gehad heeft.

Wat is niet goed voor de database? Wat juist wel? Wanneer is een tabel te groot? Wat pas ik toe en wanneer? Ik heb nu echt meer vragen dan antwoorden en een beetje sturing is van harte gewenst. Als iemand iets weet, docs, tuts of iets dergelijks, of me een beetje uitleg geven kan, alvast bedankt! Ik zit vast. ( niet echt vast maar ik kan/durf niet verder voordat ik domme dingen doe en op 't eind alles opnieuw kan doen )

Groet!

[ Voor 3% gewijzigd door iH8 op 14-12-2004 22:29 . Reden: ucfirst() ;) ]

Aunt bunny is coming to get me!


Acties:
  • 0 Henk 'm!

Verwijderd

Het best kun je op zoek gaan naar een uitleg van het normaliseren van een database.

Kijk bv. eens hier (uit de P&W faq)
http://www.phpbuilder.com/columns/barry20000731.php3

Wil je hulp op dit forum, kun je denk ik beter je vraag minder algemeen maken. Dus post eens wat voor structuur je nu hebt, en waarom je daar problemen in ziet.. oftewel een gerichtere vraagstelling, je vraag is wel erg algemeen zo..

[ Voor 41% gewijzigd door Verwijderd op 14-12-2004 21:49 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Nu online
Ik herken het probleem van de topic starter wel. In PostgreSQL kun je dit adequaat oplossen door middel van table inheritance. Effectief werkt dit hetzelfde als het derde scenario dat de topic start beschrijft: je hebt een hoofdtabel met daarin Id en eventueel Soort (en eventuele andere algemene velden, zoals Prijs en Omschrijving) en een subtabel per soort, met Id en extra velden van de soort. De Id's hou je gesynchroniseert.

Querien is op deze manier nog redelijk efficient. Hoewel de gegevens uit twee tabellen moet komen, is de oplossing niet veel minder efficient omdat je dezelfde id's gebruikt in beide tabellen. PostgreSQL geeft bovendien de mogelijkheid om in een 'afgeleide' tabel te werken, zodat je niet handmatig de gegevens in de tabellen hoeft te synchroniseren en combineren. In MySQL is dat waarschijnlijk een stuk lastiger; je zal daar zelf waarschijnlijk een aantal hulp-functies voor moeten schrijven. Sowieso is het met MySQL ook veel lastiger om de consistentie van je tabellen te garanderen.

Toch denk ik dat in de situatie die je beschrijft een object-georienteerde structuur het meest geschikt is. Dat geldt trouwens vooral wanneer de eerste optie, met een enkele tabel met een heleboel kolommen, te complex wordt. Die optie is namelijk ook zo gek nog niet; het is simpel en doeltreffend, maar als het betekent dat je tientallen kolommen in je tabel krijgt, is het waarschijnlijk erg onoverzichtelijk.

offtopic:
Er zit trouwens ook een shift-toets op jouw toetsenbord, neem ik aan. Gebruik die alsjeblieft om je tekst een beetje leesbaar te formatteren.

[ Voor 6% gewijzigd door Soultaker op 14-12-2004 21:56 ]


Acties:
  • 0 Henk 'm!

  • iH8
  • Registratie: December 2001
  • Laatst online: 17-06-2024
@ De Generaal:

Ik had zelf al geprobeerd m'n "vraag" beter te formuleren maar toen werd het me te specifiek en had ik tien verschillende vragen gesteld ghehehe. Dat stuk over die normalisatieregels wat je daar post heeft me enorm geholpen. Ik had er idd overheen gelezen in de FAQ. Bedankt.

@ Soultaker:

Bedankt voor je input, er werd al van alle kanten PostgreSQL geroepen als oplossing voor andere vraagstukken. Nu alweer. De kogel is wel door de kerk zo. Ik hoop alleen niet dat het gebruik in PHP veel verschilt met MySQL. Ik zal eens gaan lezen.

Aunt bunny is coming to get me!


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Nu online
Je moet niet over op PostgreSQL hoor, maar het is meer dat table inheritance expliciet ondersteund worden door PostgreSQL, vandaar dat ik die aanhaalde. (Een heleboel gangbare RDBMS'en hebben geen expliciete ondersteuning voor table inheritance.) Maar goed, als je over wil stappen, hou ik je niet tegen. :P