Jak zaprojektowac taka relacje?
pachura - 19-07-2006 00:44
Jak zaprojektowac taka relacje?
Czesc
Natknalem sie na problem w zaprojektowaniu relacji gdy rekord z tabeli "detail" wskazuje na krotke z tabeli "master_1" lub "master_2" (tylko z jednej z tych tabel, nigdy z dwoch na raz). Chyba przyklad bedzie bardziej zrozumialy:
Od razu zaznaczam, ze przyklad moze nie miec duzo wspolnego z rzeczywistoscia. Są uczelnie (to jest powiedzmy poziom 1). Uczelnia ma katedry i grupy badawcze (zupełnie rozdzielne byty) - to są dwie tabele na poziomie 2. Kazda katedra i kazda grupa badawcza ma pracowników (jedna tabela z pracownikami na poziomie 3). Tutaj widać problem - każdy pracownik moze nalezec albo do katedry albo do grupy badawczej, ale nigdy do obu na raz.
Robienie w tabeli pracownikow dwoch FK (z jakims check'iem sprawdzajacym, czy na pewno jest tylko jeden wybrany) wydaje mi sie "badziewne" - jak mozna to zaprojektowac bardziej elegancko?
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
=?ISO-8859-2?Q?S=B3awomir_Szysz=B3o?= - 19-07-2006 00:44
Dnia 17 Jul 2006 22:52:31 +0200, "pachura" <pachuraWYTNIJTO@poczta.onet.pl> wklepał(-a):
>Od razu zaznaczam, ze przyklad moze nie miec duzo wspolnego z rzeczywistoscia. >Są uczelnie (to jest powiedzmy poziom 1). Uczelnia ma katedry i grupy badawcze >(zupełnie rozdzielne byty) - to są dwie tabele na poziomie 2. Kazda katedra i >kazda grupa badawcza ma pracowników (jedna tabela z pracownikami na poziomie 3). >Tutaj widać problem - każdy pracownik moze nalezec albo do katedry albo do >grupy badawczej, ale nigdy do obu na raz.
A czym się różni katedra od grupy w sensie zbioru atrybutów? -- Sławomir Szyszło mailto:slaszysz@poczta.onet.pl Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/ Archiwum http://groups.google.com/groups?grou...mp.bazy-danych
pachura - 19-07-2006 00:44
> A czym się różni katedra od grupy w sensie zbioru atrybutów?
Powiedzmy, ze te dwie tabele maja jakies 20% wspolnych pol. Dodatkowo katedra ma tabele podrzedne, ktorych nie ma grupa badawcza (np. zajecia dla studentow prowadzone przez ta katedre)
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
=?ISO-8859-2?Q?S=B3awomir_Szysz=B3o?= - 19-07-2006 00:44
Dnia 17 Jul 2006 23:32:06 +0200, "pachura" <pachuraWYTNIJTO@poczta.onet.pl> wklepał(-a):
>Powiedzmy, ze te dwie tabele maja jakies 20% wspolnych pol. Dodatkowo katedra >ma tabele podrzedne, ktorych nie ma grupa badawcza (np. zajecia dla studentow >prowadzone przez ta katedre)
No to skoro relacje do masterów są w łuku, to nie pozostaje nic innego jak zrobić te 2 klucze. A sprawdzenie zrobić w aplikacji np. radiogroup z 2 buttonami "katedra" i "grupa badawcza"; dodatkowo może być prosty trigger before insert:
if (:new.klucz_katedra is null and :new.klucz_grupa is null) or (:new.klucz_katedra is not null and :new.klucz_grupa is not null) then raise error; end if; -- Sławomir Szyszło mailto:slaszysz@poczta.onet.pl Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/ Archiwum http://groups.google.com/groups?grou...mp.bazy-danych
pachura - 19-07-2006 00:44
> No to skoro relacje do masterów są w łuku, to nie pozostaje nic innego jak > zrobić te 2 klucze. A sprawdzenie zrobić w aplikacji np. radiogroup z 2 > buttonami "katedra" i "grupa badawcza";
Co to znaczy "są w łuku" ???
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
=?ISO-8859-2?Q?S=B3awomir_Szysz=B3o?= - 19-07-2006 00:44
Dnia 17 Jul 2006 23:59:25 +0200, "pachura" <pachuraWYTNIJTO@poczta.onet.pl> wklepał(-a):
>Co to znaczy "są w łuku" ???
No właśnie to co napisałeś na początku - pracownik może być albo w katedrze albo w grupie: http://pszwed.ia.agh.edu.pl/labsp98/....html#Wzajemne -- Sławomir Szyszło mailto:slaszysz@poczta.onet.pl Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/ Archiwum http://groups.google.com/groups?grou...mp.bazy-danych
pachura - 19-07-2006 00:44
> >Co to znaczy "są w łuku" ??? > > No właśnie to co napisałeś na początku - pracownik może być albo w katedrze albo > w grupie: > http://pszwed.ia.agh.edu.pl/labsp98/....html#Wzajemne
Wlasnie o taka relacje jak jest pokazana na tej stronie chodzi, tylko szkoda, ze nie pisza jak przelozyc taką relacje na schemat bazy - zwyczajne zastosowanie dwoch FK nie jest jedynym sposobem. Zastanawiam sie czy nie lepiej zrobic tak: pracownik mialby jednego FK na tabele powiedzmy "byty grupujace pracownikow". Rowniez na tą tabelę wskazywałyby poprzez FK zarówno katedry jak i grupy badawcze (a moze w przyszłości i inne tabele) - na obu tych tabelach mozna zalozyc unique na FK zeby zapewnic powiazanie jeden do jeden.
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Piotr =?ISO-8859-2?Q?Kuli=F1ski?= - 19-07-2006 00:44
pachura wrote:
>> >Co to znaczy "są w łuku" ??? >> >> No właśnie to co napisałeś na początku - pracownik może być albo w >> katedrze > albo >> w grupie: >> http://pszwed.ia.agh.edu.pl/labsp98/....html#Wzajemne > > Wlasnie o taka relacje jak jest pokazana na tej stronie chodzi, tylko > szkoda, ze nie pisza jak przelozyc taką relacje na schemat bazy - > zwyczajne zastosowanie dwoch FK nie jest jedynym sposobem. > Zastanawiam sie czy nie lepiej zrobic tak: pracownik mialby jednego FK na > tabele powiedzmy "byty grupujace pracownikow". Rowniez na tą tabelę > wskazywałyby poprzez FK zarówno katedry jak i grupy badawcze (a moze w > przyszłości i inne tabele) - na obu tych tabelach mozna zalozyc unique na > FK zeby zapewnic powiazanie jeden do jeden. > a nie możesz po prostu założyć - tutaj w uproszczeniu, tabele nazwij jak chcesz - users,group,grpusr,katedra, itd
tworzysz użytkowników, następnie grupy użytkowników, a w tabeli grpusr wiążesz użytkowników z grupami, i oczywiście możesz w tej tabeli dać wskazanie do działu,wydziału,katedry czy czegokolwiek. Od interface zewnętrznego należy pilnowanie dodawania użytkowników do grupy, np. jesli już jakiś user znajduje się w grpusr to go nie dodajesz, ew. możesz zrobić w tej tabeli pole przechowujące id użytkownika unikalnym. -- pozdrawiam, GG i SkyPe w X-nagłówku posta, e-mail: zmień "wpw" na "wp" piotr "Nic się nie martw, zawsze może być gorzej"
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MySQL] Jak =?ISO-8859-2?Q?zaprojektowa=E6_tabele=3F_Wyniki_?==?ISO-8859-2?Q?pojedynk=F3w=2C_meczy_-_tenis?=
=?iso-8859-2?q?Relacje_uwzgl=EAdniaj=B1ce_czas_(jak=3F)?=
=?iso-8859-2?q?Zachowanie_integralno=B6ci_relacji_=22wiele_do _wiele=22?=
=?iso-8859-2?q?Jak_si=EA_robi_insert_do_tabel_z_relacj=B1_1:1 ?=
Lista =?ISO-8859-2?Q?uporz=B1dkowana?= w relacji
2 tabele w relacji 1 do wielu - tylko jeden wiersz
[MySQL 4.1] relacja 1:n jako tekst oddzielony przecinkami
Czy stosuje sie relacje bez wymuszania wiezow integralnosci?
[TEORIA BD] Wyznaczanie kluczy relacji .
Inkrementacja rekordów
zanotowane.pldoc.pisz.plpdf.pisz.plshanti.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|