[mysql/php] Enum veld of andere oplossing

Pagina: 1
Acties:

  • Quinie
  • Registratie: Juli 2001
  • Laatst online: 29-07-2025
Ik heb op mijn website de mogelijkheid voor gebruikers om zich te registreren bij 2 website. Zij doen dit doormiddel van een radiobutton (website1, website2)

Nu om de mogelijkheid te maken er later een 3de website hieraan te koppellen zat ik hieraan te denken:

1 tabel websites.
websiteNr
websiteNaam
etc.
(deze tabel maakt de radiobuttons)

Bij de users een enum veld (website) toevoegen.
de radiobuttons voerzien van de values 1,2 en straks 3.
(de websiteNr's)

Nu heb ik zelf dus nooit eerder met Enum velden gewerkt. Maar is dit mogelijk zo :?
En kan ik dit veld update alsof het een Int of Char veld is (dus voegt hij zelf toe en haalt ie zelf weg bij uit en aan vinken :? ).

en kan ik gewoon de waarde uitlezen (value ==1 ) of moet ik het uitlezen als een string en dan op inhoud filteren. Heb al veel over Enum gezocht maar kan niet echt vinden wat ik zoek dus graag jullie mening, tips en ideeen


http://www.Quinie.nl
http://soundcloud.com/quinie
https://www.wereoutthere.nl


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

het gebruik van een aparte tabel met websites is voldoende, er hoeft dan niet nog een controle bij met ENUM. je moet gewoon zorgen dat alles in je code goed wordt afgehandeld en dat er per user alleen een correcte waarde in het veld website komt.

edit:

helaas support mysql nog geen foreign-keys en referentiele integriteit

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • Quinie
  • Registratie: Juli 2001
  • Laatst online: 29-07-2025
thomaske schreef op 07 oktober 2002 @ 14:09:
het gebruik van een aparte tabel met websites is voldoende, er hoeft dan niet nog een controle bij met ENUM. je moet gewoon zorgen dat alles in je code goed wordt afgehandeld en dat er per user alleen een correcte waarde in het veld website komt.

edit:

helaas support mysql nog geen foreign-keys en referentiele integriteit
Het moet echter wel mogelijk zijn voor gebruikers zich aan te melden bij meerdere websites. Ik mis dus de info of een dergelijke update met values van radiobuttons goed in een Enum veld komt.


http://www.Quinie.nl
http://soundcloud.com/quinie
https://www.wereoutthere.nl


  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-08 20:11
Enum werkt met value's en index'en. Je zult dus tekst waardes moet toevoegen, anders wordt 1 ofzo als index gezien. Ik snap verder ook niks van enum. Maar waarom voeg je niet gewoon een extra column met type int of varchar toe? Net zo makkelijk.

Bij gebruik van meerdere sites kun je misschien een , toevoegen of een # ofzo als seperator. Daarna moet je alleen kijken of het nummer van die site voorkomt in de column.

  • Quinie
  • Registratie: Juli 2001
  • Laatst online: 29-07-2025
FlamerX schreef op 07 oktober 2002 @ 14:12:
Enum werkt met value's en index'en. Je zult dus tekst waardes moet toevoegen, anders wordt 1 ofzo als index gezien. Ik snap verder ook niks van enum. Maar waarom voeg je niet gewoon een extra column met type int of varchar toe? Net zo makkelijk.
zo draait het op dit moment en dat beperkt mij in het uitbreiden.
Ik moet dan voor website 3 een nieuw veld aan de user tabel toevoegen.

Met mijn methode is het gewoon mogelijk een nieuw record aan de tabel website toe te voegen


http://www.Quinie.nl
http://soundcloud.com/quinie
https://www.wereoutthere.nl


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

dan moet je gaan werken met een koppeltabel;

code:
1
2
3
------------     -----------------    ------------ 
| websites | --- | user_websites | ---| users    | 
------------     -----------------    ------------


voor elke combinatie van een user en een website maak je een regel in de user_websites tabel

edit:

begrijp je dat, of moet ik het nog wat duidelijker uitleggen?


vooruit dan maar ;)

3 tabellen:

websites
code:
1
2
3
4
5
6
7
-----------------------------
| website_id | website_naam |
-----------------------------
| 1          | fiets.nl     |
-----------------------------
| 2          | auto.nl      |
-----------------------------


users
code:
1
2
3
4
5
6
7
8
9
-----------------------
| user_id | user_naam |
-----------------------
| 1       | piet      |
-----------------------
| 2       | jan       |
-----------------------
| 3       | kees      |
-----------------------


user_websites
code:
1
2
3
4
5
6
7
8
9
10
11
------------------------
| user_id | website_id |
------------------------
| 1       | 1          |
------------------------
| 1       | 2          |
------------------------
| 2       | 2          |
------------------------
| 3       | 1          |
------------------------

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • Quinie
  • Registratie: Juli 2001
  • Laatst online: 29-07-2025
thomaske schreef op 07 oktober 2002 @ 14:14:
dan moet je gaan werken met een koppeltabel;

code:
1
2
3
------------     -----------------    ------------ 
| websites | --- | user_websites | ---| users    | 
------------     -----------------    ------------


voor elke combinatie van een user en een website maak je een regel in de user_websites tabel

edit:

begrijp je dat, of moet ik het nog wat duidelijker uitleggen?
Ja daar had ik ook al aan gedacht maar het kan toch simpel :? of zie ik dat verkeerd (heb ook niet de jusite info om het zeker te weten)

maar als het Enum veld de waard 1,3 heeft kan ik toch aan de hand daarvan het websiteNr (dus website 1 en 3) ophalen :? waarom dan koppellen :?


http://www.Quinie.nl
http://soundcloud.com/quinie
https://www.wereoutthere.nl


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

Ik heb net m'n vorige bericht ge-edit.
Quinie schreef op 07 oktober 2002 @ 14:40:
[...]

maar als het Enum veld de waard 1,3 heeft kan ik toch aan de hand daarvan het websiteNr (dus website 1 en 3) ophalen :? waarom dan koppellen :?
omdat het niet netjes is om meerdere gegevens in 1 veld te zetten. Da's de eerste normaalvorm! zoek maar eens naar normaliseren voor meer informatie

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • Quinie
  • Registratie: Juli 2001
  • Laatst online: 29-07-2025
thomaske schreef op 07 oktober 2002 @ 14:43:
Ik heb net m'n vorige bericht ge-edit.


[...]


omdat het niet netjes is om meerdere gegevens in 1 veld te zetten. Da's de eerste normaalvorm! zoek maar eens naar normaliseren voor meer informatie
Niet netjes... ja en als het maar werkt :P .

Nee het is duidelijk, ik zou dus dan net zo snel de velden kunnen toevoegen aan de user tabel (website1, website2, etc)


http://www.Quinie.nl
http://soundcloud.com/quinie
https://www.wereoutthere.nl


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

het vervelende is nu dat wanneer er een website bijkomt, moet je in de datamodel gaan rommelen, Er moeten ENUM waardes worden bijgezet. Het is m.i. veel netter, mooier en onderhoudbaarder wanneer je het met een koppeltabel oplost.
Stel over 2 jaar kunnen mensen zich aanmelden bij 45 sites, dan wordt dat enum veldje een enorm rotzooitje, en heb je spijt dat je daarvoor gekozen hebt!

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."

Pagina: 1