Avatar billede chalde Seniormester
10. december 2008 - 00:11 Der er 3 kommentarer og
1 løsning

Kardinaliteter og E/R

Hey
Jeg er blevet godt træt i knoppen af kardinaliteter.
Søger derfor lidt hjælp til at få en mere overordnet forståelse for brugen af det.
Givet følgende opstilling: http://peecee.dk/upload/view/144156
Hvis der enten kan være en motor eller ej, og der er f.eks 5 både til rådighed, hvordan skal hhv A1,A2 og B1,B2 skrives?
Og hvis der var uendeligt antal både, og der kan monteres 0,1 eller 2 motorer, hvordan skal det så angives?
Avatar billede mireigi Novice
10. december 2008 - 00:53 #1
Den nemmeste måde at forklare det på, er den gode gamle Kunde-Ordre-Vare:
Notits - "Vare" refererer til en type af vare, ikke en fysisk genstand.

1 Kunde kan have (M)ange Ordrer
1 Ordre hører til 1 Kunde
1 Ordre kan have (M)ange Varer
1 Vare kan være på (M)ange Ordrer

På et E/R diagram vil det derfor se således ud:
Kunde (1) <--> (M) Ordre (M) <--> (M) Vare

Husk dog på at Mange-til-Mange relationer/kardinaliteter mappes som en tredje tabel med primærnøglen fra de to andre som en sammensat primærnøgle.

I dit tilfælde vil jeg mene det forholder sig således (såfremt Engine er en type, og ikke en fysisk genstand):
Boat (M) <--> (M) Engine

Hvis det er tilfældet med en fysisk Engine, vil det se således ud:
Boat (1) <--> (M) Engine

Kardinaliteterne for dit eksempel læses således:
Mulighed 1:
1 Boat has many Engines
1 Engine is in many Boats

Muliged 2:
1 Boat has many Engines
1 Engine is in 1 Boat


Med hensyn til dit sidste spørgsmål, vil det se således ud:
Boat (1) <--> (0..2) Engine

Altså en Boat kan have 0 til 2 Engines, men en Engine hører til én Boat. Hvis Engine er en type af Engine, skal du blot erstattet (1) med (M).
Avatar billede mireigi Novice
10. december 2008 - 00:53 #2
Generelt er det bedste at bruge sin logiske sans og tænke tabel-layout når man designer sit E/R-diagram. Spørg dig selv "Hvor vil det være mest hensigtsmæssigt at have en fremmednøgle?". Det gælder om at finde den/de tabel(ler) hvor man kun vil have én tuppel per entitet, og så bruge primærnøglerne herfra på de øvrige tabeller som fremmednøgler.

Der kommer lige et Kunde-Ordre-Vare eksempel mere her:
[TABLE: Kunde(ID, Navn)]
1, Hans
2, Karen

[TABLE: Ordre(ID, {Kunde})]
1, 1
2, 1
3, 2

[TABLE: Ordre_Vare:({OrdreID}, {VareID}, Antal)]
1, 2, 5
1, 3, 1
2, 1, 4
3, 4, 1

[TABLE: Vare(ID, Navn)]
1, Blomster
2, Bønner
3, Grise
4, Burger

{} indikerer en fremmednøgle.

I ovenstående eksempel er det hele inddelt optimalt. Der er mindst mulig gentagelse af data. Hvis Ordre ID i stedet var puttet på som en fremmednøgle ({Ordre}) til Kunde, ville kunden "Hans" skulle stå 2 gange med alle oplysningerne igen.

Hvis man kan opbygge en effektiv database, kan man også kardinaliteterne. Det er blot et spørgsmål om at stille sig selv spørgsmålet "Hvorfor har jeg gjort som jeg har gjort?", og så kommer svaret på kardinaliteterne af sig selv.

Puha, det var en længere smørre. Nu vil jeg så gå i seng.

Håber du kan bruge det.
MiReiGi
Avatar billede chalde Seniormester
10. december 2008 - 01:08 #3
Rigtig godt og brugbar information. Tusind tak :)
Smid et svar.
Avatar billede mireigi Novice
10. december 2008 - 08:27 #4
Det var så lidt :)

MiReiGi
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB