twojastara
3.02.2015, 11:24:24
jakie przełożenie na strukturę bazy ma krotność relacji encji w diagramie?
Gdzie w budowie tabel mam zapisane czy relacja między encjami jest jeden-do-wielu czy jeden-do-jeden?
rad11
3.02.2015, 11:32:29
Jesli masz dobrze zrobiona strukture to aby zobaczyc jakie sa relacje pomiedzy tabelami, najlepiej uruchomic strukture bazy w jakims edytorze np. jesli mysql to mysql workbench i tam automatycznie beda widoczne powiazania i typy powiazan.
pmir13
3.02.2015, 12:03:10
Diagramy pomagają przede wszystkim zrozumieć i ogarnąć zależności między tabelami. Na strukturę tych tabel przekładają się tylko jeśli stosuje się FOREIGN KEY w tabelach InnoDB. Wtedy jeśli jakieś pole z ustawionym FOREIGN KEY na inną tabelę jednocześnie ma primary albo unique key to wtedy można mówić o relacji jeden do jeden, jeśli to zwykły index to jeden do wielu. Przydaje się to jeśli chcemy zachować spójność bazy już na poziomie mysql, na przykład by niemożliwe było usunięcie kontrahenta, na którego wystawione są faktury.
W praktyce nie pamiętam kiedy ostatnio w projekcie jakiejś bazy używałem relacji jeden do jeden. Zazwyczaj łatwiej jest po prostu umieścić wszystko w jednej tabeli.
Właściwie zdecydowana większość relacji to jeden do wielu, ewentualnie wiele do wielu połączone przez dodatkową tabelę w środku.
Do tego większość baz danych jest projektowana w ogóle bez foreign keys, a spójność jest trzymana na poziomie aplikacji (przykładowo w interfejsie nie ma w ogóle możliwości usuwania kontrahentów, ewentualnie ustawia się jakąś flagę nieaktywności, a jeśli jest możliwość usuwania to dodatkowy kod robi coś konkretnego z powiązanymi fakturami).
Oczywiście nie staram się nikogo przekonywać do rezygnowania z foreign key, kaskadowe operacje chociażby są całkiem przyjemne w odpowiednich sytuacjach, ale taka jest rzeczywistość, często terminy wygrywają ze sztywnym trzymaniem ACID.