[MySQL] Variabel aantal checkboxen vertalen naar db design

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BarthezZ
  • Registratie: Juli 2004
  • Niet online

BarthezZ

anti voetbal en slechte djs!

Topicstarter
Dit is een probleempje waar ik al een aantal keer tegenaan ben gelopen en waarbij ik eigenlijk op zoek ben naar een "best practice" oplossing. Ik probeer de situatie even te schetsen aan de hand van een (hopelijk duidelijk) voorbeeld.

Men maakt bijvoorbeeld een nieuws systeem, zoals iets wat t.net heeft. Nieuws is in verschillende categorieën van de website en er moet de mogelijkheid zijn om nieuws zichtbaar te hebben in meerdere categorieën van de website. Nu zou je dit dus in de front end simpel kunnen selecteren met een aantal checkboxes van waar het wel en niet weergeven moet worden. Maar hoe wil je dit in de back-end en het database design afhandelen.


Ik heb een aantal mogelijkheden bedacht en ik vroeg mij af wat de aangeraade manier is en vooral Waarom.


[list=1]
• Koppeltabel met het newsid en de categorie.

Voordelen:
[list]
• Robuust
• Makkelijk mogelijk toevoegen extra categorieën
• Snel in samenwerking met indexen

Nadelen:
[list]
• "groot"
• Een extra tabel met losse informatie


• Boolean Categorie velden in news tabel.

Voordelen:
[list]
• Erg simpel toepasbaar
• Geen joins nodig bij ophalen

Nadelen:
[list]
• Flawed by design (tabel verandering noodzakelijk voor extra categorieën)
• ?? eerste weegt genoeg om het eigenlijk geen optie te laten zijn


• Één Categorie veld in news tabel met (bijv) serialzed boolean velden.

Voordelen:
[list]
• Een veld nodig in nieuws tabel, geen extra joins
• Makkelijk mogelijk extra categorieën toevoegen

Nadelen:
  • Extra logica nodig om de juiste waardes te selecteren
  • Mogelijk noodzakelijk "te veel" velden op te halen en daaruit de juiste te selecteren

[ Voor 0% gewijzigd door BarthezZ op 11-04-2008 22:23 . Reden: Kleine topi fixes ]


Acties:
  • 0 Henk 'm!

  • Black Hawk
  • Registratie: Oktober 2003
  • Laatst online: 08-01 21:48
Ik zou voor optie 1 gaan. Wat jij als nadeel ziet, namelijk dat je een losse tabel hebt vindt ik juist een voordeel. Je koppelt de info (hier: een nieuws-item) los van de te tonen locatie.

Wie nooit tijd heeft, kan er niet mee omgaan.


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:36

Creepy

Tactical Espionage Splatterer

Klinkt als dat je een standaard N:M relatie hebt en dus optie 1 wilt. "Groot" is geen nadeel net als dat 1 extra tabel ook geen nadeel is. Een extra tabel waarmee je beide tabellen koppelt is echt standaard normalisatie werk.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • BarthezZ
  • Registratie: Juli 2004
  • Niet online

BarthezZ

anti voetbal en slechte djs!

Topicstarter
Ok wat ik dus al dacht eigenlijk. Dus het komt vaker voor dat er in totaal een stuk of 15~20 koppeltabellen kunnen zijn over een gehele site?
Ik vond het zelf relatief zo'n rotzooi worden omdat er redelijk wat situaties zijn waar dit voorkomt.

Acties:
  • 0 Henk 'm!

  • Hobbles
  • Registratie: Augustus 2004
  • Laatst online: 10-09 08:00
15 tot 20 koppel tabellen zijn geen uitzondering wanneer het om een uitgebreid datamodel gaat hoor. Optie 1 is the way to go. Pas als je echt tegen performance problemen gaat aanlopen (wat niet snel gebeurt hiermee) zou je misschien een andere oplossing kunnen overwegen.

Everything is possible if you really want it.


Acties:
  • 0 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 16:42

Boss

+1 Overgewaardeerd

Als het aantal mogelijkheden beperkt is kan je er ook voor kiezen om de gegevens in een integer oid op te slaan. Door een integer binair te representeren (een serie van 8 enen en nullen) kan je 8 booleans kwijt in een integer veld.

Dan moet je alleen wel ergens goed vastleggen welke waarde waarmee overeenkomt.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Acties:
  • 0 Henk 'm!

  • Kayshin
  • Registratie: Juni 2004
  • Laatst online: 09-03-2018

Kayshin

Bl@@T @@P!!!

Wat heet "groot" in dit geval? Zoals ik dit nu zie zul je niet zo heel erg snel aan de honderdduizenden of meer komen ;)

Optie 1 all the way :)

My personal videoteek: -Clique-; -NMe- is een snol!


Acties:
  • 0 Henk 'm!

  • Swaptor
  • Registratie: Mei 2003
  • Laatst online: 17-06 07:31

Swaptor

Java Apprentice

@Boss: Helaas is jouw oplossing oof 'flawed by design', en echt lekker makkelijk beheersbaar is het ook niet. Probeer eens een extra bool toe te voegen ;)

N:M-relaties altijd oplossen met een koppeltabel, normalisatie FTW!

Ontdek mij!
Proud NGS member
Stats-mod & forum-dude

Pagina: 1