Skrivet av serafim:
Den modellen ligger sedan till grund för en överföring till en matematisk notation som sedan använda för att normalisera databasen inna man för över den slutliga strukturen till den deklarationsnotation du ger exempel på. Din deklaration av en tabell är alltså det sista steget för att skapa tabellerna i databasen.
Det är en formell metod som gör att det inte spelar någon större roll om det är tio eller tvåhundra tabeller i databasen. Ett litet exempel som jag använt i undervisning:
En databas över fastighetsbolag och deras hyreslägenheter (någonstans i Sverige)
Att få någon schematisk bild (eller flera) är mycket bra att ha, det gör det lättare för utvecklare som vet hur databaser fungerar att förstå. Ofta finns det möjligheter att generera sådana här diagram direkt i verktygen man använder för att skapa databasen.
Som du beskriver så är det också viktigt att förstå normalisering, och varför databaser måste normaliseras (om man inte vill ha problem).
Men så har vi problemet med att göra fel, vad händer om man designat fel och börjat skriva kod, kanske mycket kod. Fel kommer göras och viktigast av allt enligt mig är att se till att konsekvenserna av felaktig design i databasen blir så små som möjligt.
Ett exempel på databaslösning som är gjord för att vara flexibel är CRM systemet ACT! (obs! över 20 år sedan jag tittade på systemet som kan hänt en del).
Act! hade i princip en enda tabell de jobbade mot, EN. Samtidigt som de bara hade en enda tabell var det ett av de mest flexibla systemen.
Hur kunde de lagra så mycket med en enda tabell?
Svar: De använde inte en kolumn i tabellen för att koppla samman relaterad data, de använde två kolumner. Om man använder två kolumner behöver man inte massa tabeller för det är bara att skapa en ny "tabelltyp" om ena kolumnen beskriver vilken tabell det är.
Självklart finns en hel del andra problem kopplade till att använda två kolumner för att para ihop data men ville bara nämna exempel på hur mycket man kan trixa.
Att exempelvis göra trädlösningar i en databas som skall vara sökbara och snabba, fungera med referensintegritet mm. Det är sällan en lösning som fungerar för något inte har ett pris i något annat.
Även om det kan tyckas enkelt och jobba med data i databaser (förstå tabeller är inte svårt) blir det snabbt komplicerat om man skall ha komplicerade lösningar samtidigt som databasen också skall vara snabb och underhållsfri.
En del väljer NoSQL för att lösa sådant här vilket nästan alltid är ett STORT misstag.
Samma sak i programmering, saker ändrar sig och man gör fel och det måste man anpassa sig för såvida det inte är specifika uppdrag för en enda kund eller man vet exakt vad man önskar. Kan nog inte komma ihåg någon som aldrig önskat vilja ha mer saker eller önskar ändringar efter specifikation gjorts.