Auteur Topic: MySQL database Tips  (gelezen 3184 keer)

0 leden en 1 gast bekijken dit topic.

xvilo

  • Global Moderator
  • Verslaafd DigitalPlace Lid
  • *****
  • Berichten: 2674
  • Karma: -44
    • Bekijk profiel
    • http://www.xvilo.com
MySQL database Tips
« Gepost op: november 05, 2015, 10:44:33 am »
  • [+1]0
  • [-1]0
  • Hallo Allemaal,


    Ik zit er overna te denken om een eigen klanten systeem te gaan maken, maar nu is de vraag. Wat is de beste manier om de database structuur op te maken? In eerste instantie gaat het alleen nog maar klanten opslaan en beheren.


    Ik kwam bijvoorbeeld dit schema tegen van de wordpress database:



    En dan vooral het stuk:



    Om een tabel te hebben met wat generieke user data en een tabel usermeta. Maar in het geval van Wordpress word er voor ieder meta veld een aparte rij aangemaakt. Maar is het ook een idee om bijvoorbeeld in de user tabel een meta row toe te voegen met deze meta als JSON ingevoegd? Of is zijn dan 2 aparte tabellen toch beter?


    Ik hoor graag wat jullie kijk hierop is!


    //xvilo


    OnlineRageKiller

    • DigitalPlace Lid
    • *
    • Berichten: 200
    • Karma: -10
    • Talk is cheap, show me the code!
      • Bekijk profiel
    Re: MySQL database Tips
    « Reactie #1 Gepost op: november 05, 2015, 11:57:14 am »
  • [+1]0
  • [-1]0
  • Als ik jou was zou ik eerst alles in de command line fixen, en dan gewoon alles met SQL Workbench beheren

    xvilo

    • Global Moderator
    • Verslaafd DigitalPlace Lid
    • *****
    • Berichten: 2674
    • Karma: -44
      • Bekijk profiel
      • http://www.xvilo.com
    Re: MySQL database Tips
    « Reactie #2 Gepost op: november 05, 2015, 12:16:54 pm »
  • [+1]0
  • [-1]0
  • @stack9modz voor dat ik bezig ga met 'het fixen in de CLI' en het beheren met Sequel (in mijn geval) moet ik éérst wel wat te 'fixen' en te 'beheren' hebben!

    Mijn vraag is dus ook; Wat is de beste manier om de database structuur op deze manier op te maken? Dus een beetje de do's en don'ts als het gaat om databases


    Ik ben een swagboy 6s plus met Tapatalk


    Brownbear

    • DigitalPlace Lid
    • *
    • Berichten: 65
    • Karma: 3
      • Bekijk profiel
      • http://www.student.tue.nl/K/c.v.horssen/
    Re: MySQL database Tips
    « Reactie #3 Gepost op: november 05, 2015, 12:26:29 pm »
  • [+1]0
  • [-1]0
  • Sorry, ik heb een andere vorm van notatie geleerd, is dit een 1-1 verhouding? Zoja kan je de tabellen gewoon samen voegen, al is het volgens mij "best practice" om dit in 2 tabellen te houden, dus mocht je gaan googelen voor hulp kun je met 2 tabellen wss sneller hulp vinden.

    Edit
    https://dzone.com/articles/20-database-design-best
    Wat best practices
    « Laatst bewerkt op: november 05, 2015, 12:32:31 pm door Brownbear »

    xvilo

    • Global Moderator
    • Verslaafd DigitalPlace Lid
    • *****
    • Berichten: 2674
    • Karma: -44
      • Bekijk profiel
      • http://www.xvilo.com
    MySQL database Tips
    « Reactie #4 Gepost op: november 05, 2015, 12:34:06 pm »
  • [+1]0
  • [-1]0
  • Wat je volgens mij als voordeel hebt met deze 2 tabellen is dat je wat meer schaalbaar bent als het gaat om extra velden later toevoegen en verwijderen. Anders moet je als je het in een tabel doet extra rijen gaan toevoegen en verwijderen enzo, of maakt dat opzich niet uit?

    Edit:
    Ik ga het linkje even checken


    Ik ben een swagboy 6s plus met Tapatalk


    Brownbear

    • DigitalPlace Lid
    • *
    • Berichten: 65
    • Karma: 3
      • Bekijk profiel
      • http://www.student.tue.nl/K/c.v.horssen/
    Re: MySQL database Tips
    « Reactie #5 Gepost op: november 05, 2015, 12:45:52 pm »
  • [+1]0
  • [-1]0
  • Door de tabellen samen te voegen ga je in tegen de normalisatie best practice, hoe en wat dat precies in houdt vind je op wikipedia: https://nl.m.wikipedia.org/wiki/Databasenormalisatie

    Edit: typefout verwijderd

    gertmenkel

    • Actief DigitalPlace Lid
    • **
    • Berichten: 1125
    • Karma: 131
      • Bekijk profiel
    Re: MySQL database Tips
    « Reactie #6 Gepost op: november 05, 2015, 07:52:37 pm »
  • [+1]0
  • [-1]0
  • Zoals Brownbear al zegt, je kunt het bestje je database normaliseren. De makkelijkste manier om dit te doen is iedere set van data die herhaald voor kan komen (adres, klantinfo, aankopen) in een aparte tabel te stoppen met een eigen ID. Op het moment dat je daar 1 tabel van maakt ga je hoogstwaarschijnlijk data herhalen en daar wordt je database door vervuild (plus het is ook niet best voor de snelheid).

    Kort gezegd: herhalen is slecht.

    Wat voor data wil je nu precies opslaan? Alleen naam-, authenticatie- en accountactivatiegegevens? Of moeten er ook nog producten etc. bijkomen?

    Want de twee tabellen zijn eigenlijk precies zoals ik het zou doen met klanten en metadata (die geen vaste structuur heeft).
    Als je een vaste structuur hebt (denk aan "iedere klant heeft een adres", "iedere klant heeft een of meer producten") dan kun je beter een tabel maken van de data met een vaste structuur met een uniek ID per set data en dan een verwijzing vanuit de klant naar de dataset.

    Mocht data voor meerdere klanten hetzelfde kunnen zijn (zelfde set producten, zelfde adres voor 3 klanten) of mocht een klant meerdere objecten hebben (een klant kan 3 tv's bestellen) dan kun je misschien het beste een tabel maken die alleen klantid's en objectid's bevat alleen om daar mee te joinen.
    « Laatst bewerkt op: november 05, 2015, 07:54:42 pm door gertmenkel »
    ThePirateBay AFK
    Bekijk de vrije en gratis documentaire!

    Buzzer

    • Ex-Moderator
    • Actief DigitalPlace Lid
    • **
    • Berichten: 853
    • Karma: 13
    • Nodeïst
      • Bekijk profiel
      • http://infamous-irc.com
    Re: MySQL database Tips
    « Reactie #7 Gepost op: november 05, 2015, 10:00:47 pm »
  • [+1]0
  • [-1]0
  • Op het moment dat je daar 1 tabel van maakt ga je hoogstwaarschijnlijk data herhalen en daar wordt je database door vervuild (plus het is ook niet best voor de snelheid).

    Kort gezegd: herhalen is slecht.
    Door de tabellen samen te voegen ga je in tegen de normalisatie best practice
    Tenzij je een NoSQL database (bijv. MongoDB) gaat gebruiken, dan is het weer ineens de norm om alles geïsoleerd te houden en liever dingen dubbel op te slaan dan te veel referenties te maken  :gangstah:


    Maar als je bij SQL blijft (wat waarschijnlijk heel verstandig is, hoe leuk prutsen met NoSQL ook is) is mijn advies: aangezien het klinkt alsof je nog niet zo goed weet wat er allemaal in de database moet gaan komen, begin simpel met een enkele tabel van klanten, ga direct afsplitsen naar aparte tabellen zodra je aparte entiteiten krijgt (bijv. klant heeft geassocieerde facturen) of als je merkt dat je data aan het herhalen bent, zoals gertmenkel al beschreef. Zorg dat elke tabel een auto incremented ID row heeft zodat je altijd op een unieke en data-onafhankelijke manier kunt verwijzen naar een specifieke row in je dataset.

    グーグル翻訳はうまく翻訳できませんので、グーグル翻訳使用してこの文章を翻訳しないでください。また、任天堂は最高です。