sql >> Databasteknik >  >> RDS >> Mysql

DB design:medlemmar tabell separat eller alla i en tabell?

Det beror mycket på vad de "andra" detaljerna är. Detta är en vanlig och intressant fråga, och det finns inget "hårt och snabbt" svar vid första anblicken. Men om vi tänker på frågan mer abstrakt, om det faktiska förhållandet mellan attributen ("detaljerna") för någon speciell sak som du vill representera, kan vi finna viss klarhet.

I din fråga anger du att vänner har "minimala" och "andra" detaljer. Istället för att klassificera dessa detaljer som "minimala" eller "annan", låt oss klassificera dem efter huruvida någon individuell ("atomär") detalj helt kan bestämmas av vad som än gör en vän unik.

Jag antar att det finns någon primärnyckel (PK), som FriendID eller e-postadress eller något. Med tanke på denna unika identifierare, fråga dig själv:"Om jag får exakt ett FriendID (eller e-post eller vad du nu använder som PK) vilka uppgifter om den vän är jag helt säker på? T.ex. med FriendID=2112, jag absolut vet vännens förnamn, efternamn och födelsedatum, men jag inte vet absolut den kompisens telefonnummer eftersom det finns mer än en av dem.

Gruppera i en tabell alla detaljer du entydigt känner till med tanke på PK. Lägg detaljerna för vilka du behöver mer data (som "hem" eller "arbete" när det gäller telefonnummer) i "underordnade" tabeller, med främmande nyckel tillbaka till "förälder"-tabellen på PK. (Notera:Det är extremt troligt att den underordnade tabellens PK kommer att vara sammansatt; det vill säga sammansatt av den överordnade tabellens PK och den differentierande faktorn (som "hem" eller "arbete" i det här exemplet). Sammansatta nycklar för många sidan av 1-M relationer är mycket bra.)

Databasnördar kallar detta nedbrytning baserat på funktionella beroenden .



  1. Stöder PostgreSQL transparent komprimering av tabeller (fragment)?

  2. Skapa en relation i SQL Server 2017

  3. SQLite primär nyckel

  4. Skapa en tabell av två typer i PostgreSQL