sql >> Database teknologi >  >> RDS >> Mysql

DB design:medlemmer tabel separate eller alle i én tabel?

Det afhænger meget af, hvad de "andre" detaljer er. Dette er et almindeligt og interessant spørgsmål, og der er ikke noget "hårdt og hurtigt" svar ved første øjekast. Men hvis vi tænker på problemet mere abstrakt, om det faktiske forhold mellem egenskaberne ("detaljerne") af en bestemt ting, du ønsker at repræsentere, kan vi finde en vis klarhed.

I dit spørgsmål angiver du, at venner har "minimale" og "andre" detaljer. I stedet for at klassificere disse detaljer som "minimale" eller "andet", lad os klassificere dem efter, hvorvidt nogen individuelle ("atomare") detaljer kan bestemmes fuldt ud af, hvad der gør en ven unik.

Jeg formoder, at der er en primær nøgle (PK), såsom FriendID eller e-mail-adresse eller noget. I betragtning af denne unikke identifikator, spørg dig selv:"Hvis jeg får præcis ét FriendID (eller e-mail eller hvad du nu bruger som PK), hvilke oplysninger om denne ven er jeg helt sikker på? F.eks. givet FriendID=2112, er jeg absolut sikker på kender denne vens fornavn, efternavn og fødselsdato, men jeg ikke kender absolut denne vens telefonnummer, fordi der er mere end én af dem.

Saml i én tabel alle de detaljer, du entydigt kender givet PK. Læg de detaljer, som du har brug for flere data til (som "hjem" eller "arbejde" i tilfælde af telefonnumre) i "underordnede" tabeller, udenlandsk-nøgle tilbage til "forælder"-tabellen på PK. (Bemærk:Det er yderst sandsynligt, at den underordnede tabels PK vil være sammensat; det vil sige sammensat af den overordnede tabels PK og den differentierende faktor (som "hjem" eller "arbejde" i dette eksempel). Sammensatte nøgler til de mange sider af 1-M relationer er meget gode.)

Databasenørder kalder denne nedbrydning baseret på funktionelle afhængigheder .



  1. SQL HVIS SELECT-forespørgslen er null, foretag en anden forespørgsel

  2. EF 4, hvordan man tilføjer delklasser

  3. MySQL Data - Bedste måde at implementere personsøgning?

  4. behandling af et stort antal databaseposter med personsøgning bliver langsommere med tiden