Marcin Barańczak

Marcin Barańczak Programista - tester
automatyzujący

Temat: Problem z utworezniem relacji

Staram się dojść do ładu z jedną z relacji w bazie ale niestety bezskutecznie.

Danych jest kilka tabel:
-BUDYNKI
-SAMOCHODY
-PERSONEL
-TERMINARZ

W tabeli budynki / samochody / personel ma znajdować się lista (w budynkach - lista budynków, w samochodach - samochodów a w personelu - personelu).
W terminarzu mają być zapisywane wydarzenia tyczące się budynków/samochodów/personelu. Jak można stworzyć relację która pozwoli wybierać pożądaną tabelę?

jedyny pomysł na jaki wpadłem to:

tabela TERMINARZ:
*data (określa datę wydarzenia)
*zdarzenie (określa wydarzenie)
*wybor (określa które pole będzie wybrane, np samochody)
*budynki (jeżeli wybór określi tą pozycję wpisane tutaj będzie id budynku)
*samochody (analogicznie, jak powyżej ale z samochodami)
*personel (analogicznie, jak powyżej ale z personelem)

Przykładowy wpis:
05.12.2018 / spotkanie / personel / NULL / NULL / 3
06.12.2018 / przegląd techniczny / samochody / NULL / 2 / NULL

czyli:
05.12.2018 ma odbyć się spotkanie z Panem Janem Kowalskim (członek personelu, numer id w bazie - 3)
06.12.2018 ma odbyć się przegląd techniczny opla (samochód, numer id w bazie - 2)

czy istnieje jakieś bardziej optymalne / lepsze rozwiązanie tej sprawy?

Z góry dziękuję za pomoc.

konto usunięte

Temat: Problem z utworezniem relacji

Przepraszam.
Czy jest to "z góry dostana" struktura?
Czy masz sam wpływ na to co i w jakich tabelach będzie zapisywane?
Czy możesz np wprowadzić tabelę pośrednią typu zasobu_uprawnione_do_wyboru w terminarzu w rodzaju numer_zasobu, typ_zasobu, numer_zasobu_w _swoim_typie...?
Marcin Barańczak

Marcin Barańczak Programista - tester
automatyzujący

Temat: Problem z utworezniem relacji

Struktura tabel z "podstawowymi danymi" jest niestety odgórnie ustalona (czyli tabele pracownicy / budynki / samochody jest nie do ruszenia).

Tabela terminarz ma narzucone wymagania (musi tam znajdować się informacja o dacie, rodzaju wydarzenia oraz podmiocie tego wydarzenia - czyli kiedy ma nastąpić wydarzenie, jaki będzie to rodzaj wydarzenia oraz kogo/czego to wydarzenie będzie tyczyło). Mogą być tutaj dołożone dodatkowe kolumny.

Mogą być tworzone tabele przejściowe. Zawartość dowolna, przy założeniu, że nie będą one nadmiarowe.

Zapomniałem nadmienić, że jest też tabela ZDARZENIE (innymi słowy wybór zdarzenia nie jest podawany z ręki tylko wybierany z listy). Nie wiem czy jest to istotna informacja.

konto usunięte

Temat: Problem z utworezniem relacji

Dalej nie rozumiem funkcjonalności tabeli terminarz.
Jak w niej zapisać np wyjazd dwóch osób (x, y) samochodem (a) na inspekcję budynku (Q)...?
Inaczej mówiąc, spróbuj odpowiedzieć (może choćby sobie) co byś w tej tabeli chciał zapisywać.
"Ideałem" (a przynajmniej bliżej) było by gdybyś w tabeli terminarz mógł jakoś identyfikować zdarzenie i powtarzać je w kolejnych liniach z różnymi zasobami albo rozbić to jeszcze bardziej i zrobić to w dwóch tabelach terminarz_nagłówek - id_terminu,termin/data, rodzaj_zdarzenia i w drugiej terminarz_uczestnicy - id_terminu, rodzaj_uczestnika,id_uczestnika/zasobu.
Takie rozwiązanie wyglądało by na bardziej elastyczne...
Ale to Ty wiesz, kto i do czego ma z tego "strzelać". :)
Marcin Barańczak

Marcin Barańczak Programista - tester
automatyzujący

Temat: Problem z utworezniem relacji

nie jestem pewien czy się do końca rozumiemy.

zasadniczo zadaniem tabeli terminarz jest zbiór informacji o czasie, jednym wydarzeniu i kogo/czego ma to wydarzenie się tyczyć.

problem polega na tym, że informacje o tym kog/czego wydarzenie ma się tyczyć jest rozbite na kilka tabel.

idealnie struktura terminarza powinna wyglądać tak:

*id
*data (data w której miałoby nastąpić zdarzenie)
*id_zdarzenia (id z listy dostępnych zdarzeń)
*kto_co (kogo lub czego będzie dotyczyło wydarzenie)
*id_osoby (lub) samochodu (lub) budynku

problemem właśnie jest to, że interpretacja danych w jednym polu jest zależna od danych w innym polu.

czyli ta sama wartość (powiedzmy nr 3 ) będzie zidentyfikowane jako "kowalski", jeżeli w polu kto_co będzie "personel", lub jako fiat, jeżeli w polu kto_co będzie "samochód"

mówiąc innymi słowy potrzeba stworzyć odpowiednik programowego switcha.

konto usunięte

Temat: Problem z utworezniem relacji

Mając to w dwóch tabelach.
"nagłówkowa": id_spotkania, data,rodzaj,opis?
"detaliczna": id_spotkania , id_zasobu, rodzaj_zasobu
można to sobie potem "kompletować" i uzupełniać w całość choćby przy użyciu funkcji case..
...case when (rodzaj_zasobu='samochód') then (select zestaw_informacji_o_zasobie from samochody where detaliczna.id_zasobu=samochody.id_samochodu )
when (.... itd
endcase
Nie ma tu mowy o nadmiarowości a z takiej struktury dwóch tabel do opisania "TERMINARZA" możemy dość elastycznie korzystać ustalając terminy wspólne dla różnych zasobów ....
oczywiście samą informację o spotkaniu wyciągając z zespołu tabel nagłówkowa/detaliczna....
do przygotowanej formatki w interfejsie.
Pytałeś o jakieś inne spojrzenie...
Grzegorz D.

Grzegorz D. PL/SQL Developer

Temat: Problem z utworezniem relacji

Mi przychodzą do głowy takie dwa pomysły.

1. Na "bazowym" pomyśle Marcina (3 klucze obce w tabeli terminarz) budujemy 3 widoki np. TERMINARZ_BUDYNKI, TERMINARZ_SAMOCHODY, TERMINARZ_PERSONEL.
W widokach połączymy się po odpowiednim kluczu z tabeli TERMINARZ z odpowiednią tabelą BUDYNKI/SAMOCHODY/PERSONEL.

2. Można też wyrzucić klucze obce z tabeli terminarz i traktować jedynie tę tabelę jako listę terminów. Wtedy dodatkowo tworzone są tabele:
TERMINARZ_BUDYNKOW
id_terminarza, id_budynku

TERMINARZ_SAMOCHODOW
id_terminarza, id_samochodu

TERMINARZ_PERSONELU
id_terminarza, id_personelu

Nie wiem czy to dobra opcja na ten konkretny przypadek, bo nie ma podanych ograniczeń (np. jeden termin może być przydzielony tylko do jednego "zasobu" z listy budynki/samochody/personel etc).

Temat: Problem z utworezniem relacji

Przy okazji, jako uzupełnienie do wypowiedzi poprzedników - relacja w modelu relacyjnym to tabela.

To, o czym piszesz to związek (relationship).Ten post został edytowany przez Autora dnia 09.10.17 o godzinie 22:05
Marcin Barańczak

Marcin Barańczak Programista - tester
automatyzujący

Temat: Problem z utworezniem relacji

Dziękuję bardzo za informacje :)

Odnośnie osobnych tabel - wydaje mi się, że jest to o tyle dobre rozwiązanie, że nie generuje dodatkowych informacji ( NULL), ułatwi sortowanie wg zadanego kryterium oraz przy wyświetleniu całej listy też nie powinno być problemu.Ten post został edytowany przez Autora dnia 10.10.17 o godzinie 07:16

Następna dyskusja:

Dziwny problem w funkcji T-...




Wyślij zaproszenie do