znaczacy > comp.* > comp.bazy-danych

Roman Tyczka (08.05.2019, 12:41)
Wyobrazmy sobie, ze mam zaprojektowac strukture bazy w której bedzie tabela
przyborów biurowych (PRZYBORY), tabela pracowników (PRACOWNICY) oraz
dzialów, w których pracuja pracownicy (DZIALY).
Przybory moga nalezec do pracownika konkretnego lub do calego dzialu.
Jak to najzgrabniej zaprojektowac? Mam dwa pomysly:

1. tabela wiazaca PRZYBORY_OWNER, która ma klucz obcy OWNERID (bedacy
kluczem do tabeli PRACOWNICY lub DZIALY) oraz kolumne dodatkowa OWNERKIND,
wskazujaca której tabeli dotyczy konkretna wartosc w OWNERID. Stad powstaja
wiazania po kluczach:
OWNERID -> PRACOWNIKID
lub
OWNERID -> DZIALID

2. tworze dwie tabele wiazace, osobno dla pracowników i dzialów,
odpowiednio: PRACOWNICY_PRZYBORY i DZIALY_PRZYBORY, obie z kluczami do
odpowiadajacych im kolumn w tabelach powiazanych.

Czy mozna to zrobic jeszcze inaczej? I które rozwiazanie jest
powszechniejsze?
Szyk Cech (08.05.2019, 13:15)
> 2. tworze dwie tabele wiazace, osobno dla pracowników i dzialów,
> odpowiednio: PRACOWNICY_PRZYBORY i DZIALY_PRZYBORY, obie z kluczami do
> odpowiadajacych im kolumn w tabelach powiazanych.


Ta wersja jest poprawna z tego powodu, ze mozesz zalozyc klucze obce
(chodzi o FOREIGN KEY) miedzy tabelami i wymuszac ich prawidlowe
wartosci (wiezy integralnosci) na poziomie motoru bazy danych (Sql-a).
geos (08.05.2019, 15:11)
On 08.05.2019 12:41, Roman Tyczka wrote:
> Wyobraźmy sobie, że mam zaprojektować strukturę bazy w której będzie tabela
> przyborów biurowych (PRZYBORY), tabela pracowników (PRACOWNICY) oraz
> działów, w których pracują pracownicy (DZIALY).
> Przybory mogą należeć do pracownika konkretnego lub do całego działu.
> Jak to najzgrabniej zaprojektować? Mam dwa pomysły:


zrobiłbym tabelę "pracowników" i "działów", i do tego odpowiedni widok
"właścicieli" jako union all powyższych (w wymaganym zakresie kolumn). z
widoku połączenie do tabeli przejściowej "narzędzia_właściciele".

minusem, ale stosunkowo niewielkim, jest to, że klucze w obu tabelach
(działy, pracownicy) musiałyby być generowane np. z jednej sekwencji
(lub w inny sposób trzeba byłoby dbać o ich unikalność w ramach widoku).
teoretycznie nie ma przeszkód, aby wartość klucza jakiegoś działu = 1 i
1 byłaby wartością klucza dla jakiegoś pracownika, ale widok komplikuje
tę teoretyczną możliwość. z drugiej strony generowanie jakichkolwiek
kluczy z jednej sekwencji nie jest rzadkim rozwiązaniem. jest może po
prostu trochę mało "oczywiste".

pozdrawiam
geos
Cezary Gradys (09.05.2019, 14:05)
W dniu 08.05.2019 o 12:41, Roman Tyczka pisze:
> Wyobrazmy sobie, ze mam zaprojektowac strukture bazy w której bedzie tabela
> przyborów biurowych (PRZYBORY), tabela pracowników (PRACOWNICY) oraz
> dzialów, w których pracuja pracownicy (DZIALY).
> Przybory moga nalezec do pracownika konkretnego lub do calego dzialu.


Jesli do dzialu, to musi byc powiazanie z tym dzialem, bo moze to byc
bez indywidualnego wlasciciela. Przyklad drukarka, moze nikt nie miec na
stanie.
Natomiast wszelkie olówki, dlugopisy powiazane z pracownikiem i
posrednio przez pracownika z dzialem.
Biurokracja góra!!!!
Andrzej P. Wozniak (09.05.2019, 17:49)
Osoba podpisana jako Roman Tyczka <noemail>
w artykule <news:ddlg> pisze:

> Wyobrazmy sobie, ze mam zaprojektowac strukture bazy w której bedzie
> tabela przyborów biurowych (PRZYBORY), tabela pracowników (PRACOWNICY)
> oraz dzialów, w których pracuja pracownicy (DZIALY).
> Przybory moga nalezec do pracownika konkretnego lub do calego dzialu.


Organizacja baz moze zalezec od tego, co jest wazniejsze badz czesciej
wykonywane:
1. Przypisanie do dzialu ulatwia inwentaryzacje.
2. Przypisanie do pracownika ulatwia jego rozliczenie.

> Czy mozna to zrobic jeszcze inaczej?


Jest co najmniej jedna inna mozliwosc:
Kiedy pracowników w dziale jest duzo, dobrym pomyslem dla przyborów (a
raczej urzadzen) przypisanych do dzialu moze byc przypisanie pracownika
odpowiedzialnego. W tym przypadku wypadaloby zrobic tabele, gdzie jest i
pracownik_id, i dzial_id, i dodatkowo status przypisania. Taka tabela
zalatwia tez przypadki, kiedy
pracownik moze byc przypisany do kilku dzialów lub kiedy odpowiedzialny jest
pracownik z innego dzialu.
Cezary Gradys (10.05.2019, 19:26)
W dniu 09.05.2019 o 17:49, Andrzej P. Wozniak pisze:
> Jest co najmniej jedna inna mozliwosc:
> Kiedy pracowników w dziale jest duzo, dobrym pomyslem dla przyborów (a
> raczej urzadzen) przypisanych do dzialu moze byc przypisanie pracownika
> odpowiedzialnego. W tym przypadku wypadaloby zrobic tabele, gdzie jest i
> pracownik_id, i dzial_id, i dodatkowo status przypisania. Taka tabela
> zalatwia tez przypadki, kiedy
> pracownik moze byc przypisany do kilku dzialów lub kiedy odpowiedzialny
> jest pracownik z innego dzialu.


To jest dobry pomysl, bo tym samym zapytaniem mozna przynaleznosc olówka
co drukarki ustalic. Ale ja bym zrobil pracownika wirtualnego - takiego
ducha dzialu, raz na zawsze przypisanego do dzialu i majacego te
przedmioty.
Andrzej P. Wozniak (11.05.2019, 14:03)
Osoba podpisana jako Cezary Gradys <czarekgr>
w artykule <news:5112> pisze:

> W dniu 09.05.2019 o 17:49, Andrzej P. Wozniak pisze:
> To jest dobry pomysl, bo tym samym zapytaniem mozna przynaleznosc olówka
> co drukarki ustalic. Ale ja bym zrobil pracownika wirtualnego - takiego
> ducha dzialu, raz na zawsze przypisanego do dzialu i majacego te
> przedmioty.


Lepiej funkcjonalny, wedlug realnego stanowiska, domyslnie kierownik dzialu.
W takim rozwiazaniu prac_id w zaleznosci od statusu oznaczac moze nazwisko
pracownika, stanowisko w firmie, a nawet wskazanie na zewnetrzny serwis.
Cezary Gradys (12.05.2019, 21:20)
W dniu 11.05.2019 o 14:03, Andrzej P. Wozniak pisze:
> Lepiej funkcjonalny, wedlug realnego stanowiska, domyslnie kierownik
> dzialu. W takim rozwiazaniu prac_id w zaleznosci od statusu oznaczac
> moze nazwisko pracownika, stanowisko w firmie, a nawet wskazanie na
> zewnetrzny serwis.


A skad pewnosc, ze kierownik dzialu nie bedzie kilkoma dzialami
kierowal? Albo problem jak zostanie przeniesiony, zwolni sie,
awansuje, zostanie zdegradowany itp.
Andrzej P. Wozniak (12.05.2019, 22:08)
Osoba podpisana jako Cezary Gradys <czarekgr>
w artykule <news:5112> pisze:

> W dniu 11.05.2019 o 14:03, Andrzej P. Wozniak pisze:
> A skad pewnosc, ze kierownik dzialu nie bedzie kilkoma dzialami kierowal?
> Albo problem jak zostanie przeniesiony, zwolni sie,
> awansuje, zostanie zdegradowany itp.


Napisalem wyraznie - albo nazwisko, albo stanowisko. Awansuje nazwisko, nie
stanowisko. Jestes zbyt leniwy, aby przeczytac dwa krótkie zdania i powiazac
jedno z drugim?
Podobne wątki