wat is het snelste?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Remco

Remco

10/03/2007 13:40:00
Quote Anchor link
ik heb een lijst van items van zeg maar 100 verschillende. elke gebruiker kan die meerdere keren hebben.
nu wil ik weten wat het beste zou zijn:
-voor elk apart item dat een gebruiker heeft een aparte rij maken in een tabel met gebruikersnaam en itemnaam erbij.
-in de tabel users een kolom items maken waarin alle items die de gebruiker heeft staan, gescheiden door een komma. daar ik kijk ik dan of het item bestaat met preg_match(). alleen moet ik dan wel weten hoe ik dan kan tellen hoe vaak dat item daar voorkomt.
-in de tabel users voor elk item een kolom maken met int.

ik zou dus graag willen weten welke manier het snelste zou zijn. maar als jullie betere ideeën hebben, dan wil ik ze ook horen.
 
PHP hulp

PHP hulp

29/03/2024 03:31:08
 
Frank -

Frank -

10/03/2007 13:51:00
Quote Anchor link
Even een opsomming:
Quote:
-voor elk apart item dat een gebruiker heeft een aparte rij maken in een tabel met gebruikersnaam en itemnaam erbij.
Nee, dat sla je de gegevens (de namen) meerdere keren op. Dat is vragen om data-corruptie.
Quote:
-in de tabel users een kolom items maken waarin alle items die de gebruiker heeft staan, gescheiden door een komma.
Nee, dodelijk voor de snelheid van de database (ga maar eens zoeken op 1 enkel item) en je slaat wederom gegevens dubbel op. Dit is veruit de slechtst mogelijke oplossing
Quote:
-in de tabel users voor elk item een kolom maken met int.
Nee, dan kom je in de problemen wanneer er meer items dan kolommen zijn. Tevens pas je nooit het datamodel aan wanneer er meer gegevens van dezelfde soort (in dit geval items) worden opgeslagen.

Hoe doe je het wel?

Maak 3 tabellen aan, users, items en user_items.
- users
id INT, auto_increment
naam VARCHAR

- items
id INT, auto_increment
naam VARCHAR

- user_items
id INT, auto_increment
id_user INT en foreignkey op de de tabel users.id
id_items INT en foreignkey op de de tabel items.id

Dit is dé manier om een relationele database aan te maken. Wanneer je MySQL gebruikt, zul je de innoDB-engine moeten gebruiken, maar dat is toch al de enige engine waar je wat mee kunt.

Ga je eens verdiepen in normaliseren (zie de tutorials), zul je een hoop plezier aan beleven.
 
Remco

Remco

10/03/2007 14:24:00
Quote Anchor link
ik heb die tutorial eens bekeken, maar nu weet ik nog niet hoe ik nu die tabellen kan maken.

heb je misschien een voorbeeldje? want met een voorbeeld leer ik het sneller.

ik kwam al uit op mysql.com, maar dat vind ik wazig uitgelegd, zal wel komen omdat het engels is.
 
Frank -

Frank -

10/03/2007 14:29:00
Quote Anchor link
In phpMyAdmin kun je de tabellen eenvoudig aanmaken, let er op dat je de juiste engine kiest, en klaar ben je.

Verder staan er in de Tutorials meer dan genoeg artikelen over het gebruik van databases, normaliseren, JOIN's, etc. etc.
 
Remco

Remco

10/03/2007 14:33:00
Quote Anchor link
ligt het nou aan mij, of staat die er niet bij?
ik heb er 4 staan: MyISAM, MEMORY, ARCHIVE en MRG_MYISAM.
 
Frank -

Frank -

10/03/2007 14:49:00
Quote Anchor link
Het kan zijn dat jouw hostingprovider geen innoDB ondersteunt. In dat geval zou ik een andere provider opzoeken, het is de enige engine waar je iets mee kunt. De rest is nauwelijks een database of dbms's te noemen.
 
Remco

Remco

10/03/2007 15:03:00
Quote Anchor link
nu zie ik het: InnoDB has been disabled for this MySQL server.

ik zal eens vragen waarom niet.
 
Frank -

Frank -

10/03/2007 15:21:00
Quote Anchor link
<persoonlijke mening>Jouw provider is in elk geval een sukkel van de eerste orde! Hoe verzin je het om innoDB niet te ondersteunen, het is de enige engine binnen MySQL waarmee je foreignkey's kunt aanmaken. Het is dus de enige manier om een relationele database te maken waarbij de database er zélf voor zorgt dat de relaties in stand worden gehouden. Zonder deze mogelijkheid loop je permanent het risico dat jouw database corrupt raakt. Je moet er maar zin in hebben. 1 foutje in je script en dat was het dan!

Lullig, helemaal wanneer je weet dat dit absoluut niet nodig is.

Maar goed, wie ben ik...
 
Remco

Remco

10/03/2007 16:05:00
Quote Anchor link
ik kan hem nu even niet bereiken...

hoe kan ik mijn scripts testen zonder dat ik voor een andere provider moet betalen?
 
Winston Smith

Winston Smith

10/03/2007 16:18:00
Quote Anchor link
MySQL lokaal installeren? Evt. inclusief Apache en PHP, dat werkt heerlijk ;)
 
Frank -

Frank -

10/03/2007 16:19:00
Quote Anchor link
Installeer WAMP, dan krijg je Apache, MySQL en PHP op je eigen Windows-bak.

En vergeet niet om PostgreSQL te installeren, dat is minstens 100x beter dan MySQL. (I'm still on a mission!)
 
Remco

Remco

10/03/2007 16:21:00
Quote Anchor link
ok, bedankt voor de tip.

wat is het verschil tussen MYSQL en PostgreSQL?
 
Frank -

Frank -

10/03/2007 16:27:00
Quote Anchor link
Zie Yapf.net voor een overzichtje met problemen in MySQL.

Verder is het grote verschil dat PostgreSQL zich (veel beter) aan de ANSI-SQL 92/99-standaarden houdt, iedereen met SQL-kennis kan dus met PostgreSQL aan de slag.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.