Określanie relacji na diagramach

0

Po pierwsze, witam wszystkich gdyż jest to mój pierwszy post.

A piszę ponieważ prosiłbym was o sprostowanie moich poniższych rozważań w sprawie niby błachej ale jak dla mnie nie do końca jeszcze jednoznacznej.

W projektowanej bazie biura podróży posiadam takie tabele jak
OSOBA (klient) oraz DOKUMENT.

Zakładam:
A) relacja jeden-do-wielu, gdyż każda osoba może mieć dowód, paszport,
prawo jazdy itp, które to mogą mieć tylko jednego właściciela.
B) Dokument musi być do kogoś przypisany (moim zdaniem nie może wisieć
w bazie bez podpięcia).
C) Każda osoba musi mieć co najmniej jeden odpowiadający jej dokument
(aby wyjechać wewnątrz UE wystarczy tylko DO, poza UE wystarczą dane
paszportowe). Optymalnie by było gdyby były wprowadzane dane o dwóch
dokumentach (DO+paszport), ale nie jest to konieczne.

I tu powstaje moje pytanie: Jaką relacją zapisać takie założenia?

Załóżmy, że tak narysowana relacja to relacja 1-do-n (lepiej nie
potrafię tego zobrazować używając tylko znaków na klawiaturze).
-|-------------<-

W moim przypadku odpowiednim zapisem będzie zapis taki?

  1. OSOBA -|-|--------------O-<- DOKUMENT

Czy może jednak taki?
2) OSOBA -|-|----------------|-<- DOKUMENT

Nie jestem pewny co do tych zapisów. Na moje rozumiem to tak:

  1. odnosi się do przypadku gdy wiersz z tabeli OSOBA może mieć kilka
    dokumentów, ale też nie musi mieć ani jednego dokumentu.
  2. odnosi się do przypadku gdy wiersz z tabeli OSOBA może mieć kilka
    dokumentów, ale musi mieć chociaż jeden dokument.

Ewentualnie, 2) odnosi się do przypadku gdzie osoba musi mieć wiele (więcej niż 1) dokumentów.

Wszystkie materiały tłumaczą, że "kółko" oznacza "może", a "kreska" oznacza "musi" i na tym się kończy.

Prosiłbym was o rozjaśnienie tej kwestii.

Teraz powstało jeszcze jedno pytanie, czy zapis 2) nie będzie stwarzał
problemów podczas usuwania danych z bazy?

1

Przy takiej relacji można będzie dodać dwa paszporty, właściwie to by miało sens jeżeli chcemy przechowywać informacje również o starych (przeterminowanych) dokumentach.
Jeżeli chcesz mieć tylko jeden paszport to rozważ dodatkowo oprócz:
OSOBA -|-O----------------|-<- DOKUMENT przez OSOBA.OsobaId=DOKUMENT.OsobaId
jeszcze:
OSOBA -|-O----------------|-|- DOKUMENT przez OSOBA.OsobaId=DOKUMENT.OsobaId and DOKUMENT.TypDokumentu (enum: Dowód,Paszport,Karta pobytu,Karta rezydenta)

0

_13th_Dragon dzięki wielkie za odpowiedź !

Teoretycznie mogą być w bazie przestarzałe paszporty, może zdażyć się również, że ktoś ma podwójne obywatelstwo.

Jeszcze kiepsko się poruszam po komendach w SQLu, jednak na pewno przemyślę głębiej opcję wykorzystującą enum.

Widzę jednak, że stworzyłeś trochę inne relacje o moich, gdzie dokument może tworzyć relację z osobą, jednak nie musi.
Rozumiem, że sytuacja gdy dokument nie jest podpięty do żadnej osoby w bazie danych nie jest błędem?

I jeszcze jakby można tylko rozwiać moje wątplowości dotyczące interpretacji relacji 1) i 2) z mojego pierwszego postu to byłbym wdzięczny.

Jeszcze raz dzięki za odpowiedź.

0

Znalazłem taką notację dla zapisu relacji na diagramach PDM (Phisical Database Model):

<image>classDiagramComposition.jpg</image>

Notacje tą należy czytać tak:

Indicator Meaning
0..1 Zero or one
1 One only
0..* Zero or more
1..* One or more
n Only n (where n > 1)

Jak to przełożyć teraz na notację Martina (kurzej łapki/ kurzej stopki), czyli tej użytej w poprzednich postach?
Dla przypomnienia, notacja ta wygląda tak:

<image>stopien.gif</image>

Dokładając KÓŁKO mówimy, że relacja MOŻE wystąpić.
Dokładając KRESKĘ uznajemy, że relacja MUSI wystąpić.

Czy moje poniższe przypuszczenia są słuszne? Jeżeli tak co z zapisem "n"?

Indicator Meaning Notacja Martina (tylko moje przypuszczenia!)
0..1 Zero or one -
1 One only -
0..* Zero or more ->-O-------
1..* One or more ->-
n Only n (where n > 1) ???????

Z góry dzięki,
Pozdrawiam Kuba

1 użytkowników online, w tym zalogowanych: 0, gości: 1