@Superpu:
Snyggt!
Hur ska man tolka förhållandet mellan samt entiteterna Butik, Varor och Produkt? En vara och en produkt är ju egentligen samma sak. Varor och produkter är bara skillnad i singular/plural. Kan det vara så att Varor egentligen ska vara Lager? Det finns nog inget fel att ha relationen direkt mellan Butik och Produkt, utan att använda Lager, men man måste kunna argumentera för sitt val. Det kan vara så att Lager är överkurs.
Din Produkt-entitet är inte helt korrekt. Det är inte lämpligt att skapa ett nytt attribut för varje ny produkt. Vad hade hänt om man hade en motorsåg? Jo, alla andra attribut hade blivit null. Motorsågen är inte en symaskin eller stekpanna, etc.
Vad är det som kännetecknar en produkt i en butik? Vad delar alla olika produkter för egenskaper? Egenskaperna de delar bör vara egna attribut.
Entiteterna och förhållandet mellan Chef, Person namn, Personal samt Adress hade jag ändrat en aning. Det känns inte semantiskt korrekt att ha entiteten Person namn. Den förbjuder rent semantiskt att lägga på flera entiteter. Det låter exempelvis väldigt konstigt om man skulle lägga till attributet personnummer till den då namnet anger att det enbart bör vara namnrelaterat. Jag hade bytt namn på Person namn till Person. Vidare hade jag ändrat förhållandet mellan Chef, Person, Personal till Är. (En personal är en person, en chef är en person). Detta gör det även mer logiskt att en Person bor på en Adress, inte bara Person namn.
En parentes gällandes semantik vilket är ett ord jag ser ut att ha använt mycket men kanske inte förklarat.
När man pratar om semantik när det gäller datorvetenskap (men säkert rent generellt) så är det att ordet betyder/är/innebär/etc det som det är. Det hade varit konstigt att döpa en tabell till Hund och sen sparar man katter och hästar i den också. Tabellen borde i det fallet heta Djur exempelvis. Semantiken gör att man kan vara precis i vad man faktiskt vill göra/lagra/identifiera vilket underlättar för en annan person att verkligen förstå vad syftet är. Det är en form av abstraktion som blir mer korrekt för att det är vad man faktiskt syftar på.
Edsger W. Dijkstra förklarar detta med abstraktion och semantik väldigt bra: "The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise".
Så istället för att se på Hund, Katt och Häst som unika entiteter så abstraherar man dessa till Djur.
Sidoparentes:
Ibland kan det vara lika viktigt att ha separata entiteter, men då är det även viktigt att entiteterna är separata. I Katt-tabellen sparar man katter, i Hund-tabellen sparar man hundar. Hur modellen/databasen/verksamheten faktiskt fungerar invaliderar inte att man vill kunna vara semantiskt korrekt i när man pratar om verksamheten för att faktiskt kunna modellera korrekt.
Dold text
Singular och plural spelar ingen direkt roll, det är enbart en smaksak.
Rent databasmässigt så är singular att föredra då det i majoriteten av fallen blir mer semantiskt korrekt att skriva sina querys exempelvis. Det finns däremot många fler argument kring det. Jag har skapat modeller/databaser med och utan plural och i vissa fall är det bra och i andra inte. Generellt skulle jag säga att singular är bäst men att i det stora hela inte spelar någon större roll.