sql >> Database >  >> RDS >> Mysql

DB-ontwerp:ledentafel apart of alles in één tafel?

Het hangt sterk af van wat die "andere" details zijn. Dit is een veel voorkomende en interessante vraag, en er is op het eerste gezicht geen "hard en snel" antwoord. Maar als we het probleem abstracter bekijken, over de feitelijke relatie tussen de attributen ("details") van een bepaald ding dat je wilt vertegenwoordigen, kunnen we enige duidelijkheid vinden.

In uw vraag geeft u aan dat vrienden "minimale" en "andere" gegevens hebben. In plaats van deze details te classificeren als "minimaal" of "anders", laten we ze classificeren op basis van het feit of een individueel ("atomair") detail volledig kan worden bepaald door wat een vriend uniek maakt.

Ik neem aan dat er een primaire sleutel (PK) is, zoals FriendID of e-mailadres of zoiets. Overweeg deze unieke identificatie, vraag jezelf af:"Als ik precies één FriendID (of e-mail of wat je ook gebruikt als PK) heb gekregen, van welke details van die vriend ben ik absoluut zeker? Bijvoorbeeld, gegeven FriendID=2112, ben ik absoluut weet de voornaam, achternaam en geboortedatum van die vriend, maar ik niet weet absoluut het telefoonnummer van die vriend, want er is er meer dan één.

Groepeer in één tabel alle details die je ondubbelzinnig kent gezien de PK. Zet de details waarvoor je meer gegevens nodig hebt (zoals "thuis" of "werk" in het geval van telefoonnummers) in "kind"-tabellen, terug naar "ouder"-tabel op de PK. (Opmerking:het is zeer waarschijnlijk dat de PK van de onderliggende tabel samengesteld is, dat wil zeggen, samengesteld uit de PK van de bovenliggende tabel en de onderscheidende factor (zoals "thuis" of "werk" in dit voorbeeld).) Samengestelde sleutels voor de vele zijde van 1-M relaties zijn zeer goed.)

Database-nerds noemen deze decompositie op basis van functionele afhankelijkheden .



  1. Illegale mix van sorteringen (utf8_unicode_ci,IMPLICIT) en (utf8_general_ci,IMPLICIT) voor bewerking '='

  2. Query om twee tabellen samen te voegen

  3. Waarschuwing:mysql_fetch_array() verwacht dat parameter 1 resource is, boolean gegeven in

  4. Wilt u rijnummer op kolomgroep in MIJN SQL?