sql >> Databasteknik >  >> RDS >> Mysql

Behöver mitt bord mer normalisering?

Normalisering kräver att man känner till funktionella beroenden (FDs) och sammanfogningsberoenden (FDs). Du gav dem inte.

Din ansökan Vi kan bara berätta om FD och JD om vi vet exakt vad som är "förhållandet som jag ville uttrycka" (dvs. predikat) för varje tabell (dvs. till den punkt där vi kunde titta på en situation och veta för varje möjlig rad om den gör en sann proposition från predikatet och hör hemma i tabellen) och exakt vilka möjliga situationer som kan uppstå (via "affärsregler" om möjliga tillämpningssituationer, motsvarande begränsningar för möjliga databastillstånd).

Dina "nycklar" Du gav inte FDs. Du gav bara en kandidatnyckel (CK) och en "unik nyckel". Men du kan inte bestämma några eller alla CK utan att veta vissa saker om FD. Så när du ger CKs är det samma sak som att säga att det finns och inte är säkra FDs. Du måste berätta för oss vad du har gett oss när du ger några kolumnuppsättningar märkta PK eller "unik nyckel":Är en "unik nyckel" en CK (som inte innehåller någon mindre unik delmängd) eller bara en supernyckel (unik)? Gav du alla CK eller kan det finnas andra? Kan det finnas andra supernycklar än superseten för de givna? Det är mycket användbart om du bara berättar exakt vilka FDs du vet håller (via ett minimalt omslag) och vilka du vet inte håller.

Gissa
Jag har ingen aning om vad is_calculated är för.
Kanske ett givet date och meal paret har exakt ett content ?

TL;DR Du måste verkligen kontrollera varje möjlig uppsättning kolumner för att se om den funktionellt bestämmer varje kolumn. Dvs om för varje databastillstånd en underrad med värden för uppsättningen kolumner endast visas med ett värde för kolumnen. Vi kan bara gissa utan en tydlig förståelse av dina predikat och din ansökan. Du kan minska arbetet med följande:Om en uppsättning kolumner är unik bestämmer dess supermängder alla andra kolumner. Om en uppsättning kolumner är minimalt unik (är en CK) så bestämmer ingen av dess mindre delmängder alla andra kolumner. Du kan leta efter motexempel till förmodade FD:er, där två rader kan ha samma underrad med värden för en förmodad determinant men har olika värden för ett förmodat fastställt attribut. Armstrongs axiom genererar alla FD som antyds av givna.

JDs Normalisering till 4NF och 5NF innebär att dela tabeller i flera tabeller för att eliminera JDs som inte antyds av CKs. En tabells predikat kan uttryckas som AND för andra exakt när en JD håller motsvarande predikatens kolumnuppsättningar. En relation är i 5NF när varje konjunkt i varje JD överlappar någon annan på åtminstone en CK. (Fagins medlemskapsalgoritm.)

PS Om du bryr dig om begränsningar, förlorade du en när du gick från ett bord till två?



  1. Visar data från flera frågor i ett enda cirkeldiagram med cfchart-taggen

  2. Tillåt null i unik kolumn

  3. En översikt över SQL Join-typer med exempel

  4. Android - Visa användarnamn från SQLite-databasen efter inloggning i textView