Salvation
17.03.2016, 00:27:53
Cześć

Przeszukałem już chyba najważniejsze miejsca odnośnie klucza zbiorowego w MySQL i nadal nie bardzo wiem jak się za niego zabrać. Mój problem jest następujący:
- posiadam tabele odwzorowujące strukturę uczelni [id, id_jednostki_nadrzędnej, nazwa].
- posiadam tabelę `users`, w której poprzez pojedynczą kolumnę muszę odwołać się do nazw tych tabel ze struktury.
Wyczytałem, że najbardziej optymalną rzeczą, będzie utworzenie klucza zbiorowego, który "połączy" wszystkie kolumny `nazwa` tabel ze struktury. Niestety nie wyczytałem już, jak takowy klucz utworzyć. Ktoś może mnie nakierować albo napisać rozwiązanie?
markonix
17.03.2016, 01:28:54
Nie słyszałem o takim pojęciu..
Users do pracownicy danej struktury? Jeżeli mogą być przypisani do jednej jednostki to po prostu w users tworzysz kolumnę z kluczem obcym id_jednostki.
Salvation
17.03.2016, 12:13:38
Tak, `users` to pracownik danej struktury. Problem jednak w tym, że ten pracownik, może być przypisany do jednej jednostki, ale nie tylko do tej konkretnej.
Struktura uczelni:
-- wydział
---- instytut
------ katedra
-------- zakład
No i teraz pracownik może być przypisany do jednej z powyższych tabel, ale nie zawsze tej samej. Dlatego tutaj potrzebny jest klucz zbiorowy. No i szukam rozwiązania właśnie tego problemu.
nospor
17.03.2016, 12:19:14
Zbiorowy to ja slyszalem rozne pojecia na to, ale nie klucz

Tabele:
STRUKURA
id
id_nadrzedna
nazwa
USER
id
name
surname
blabla
STRUKTURA_USER - wiaze usera ze struktura
id_struktura
id_user
Salvation
17.03.2016, 12:41:20
Rozumiem, czyli zamiast połączenia bezpośredniego utworzyć tabelę, która będzie łączącą? Tylko że wydział, instytut, katedra i zakład to osobne tabele. Każda z nich ma własne id, id_nadrzędne i nazwę. Dlatego chciałem utworzyć klucz zbiorowy po nazwie, bo jest unikalna dla wszystkich tabel.
nospor
17.03.2016, 12:45:56
A czemu to jest zrobione jako oddzielne tabele? Przeciez to nei ma sensu...
Salvation
17.03.2016, 12:49:11
No a jak to inaczej rozpisać? Skoro chciałbym, żeby można było dodawać rekordy? W jednej tabeli i klucz obcy do samej siebie?
nospor
17.03.2016, 12:51:07
Cytat
W jednej tabeli i klucz obcy do samej siebie?
Dokladnie.
Salvation
17.03.2016, 13:19:43
Czyli chodzi o takie rozwiązanie?
http://iv.pl/images/09091836863351152204.pngBo ja rozmyślałem nad takim:
http://iv.pl/images/33495087204453087808.png tylko nie wiedziałem jak to połączyć.
nospor
17.03.2016, 13:38:55
Twoje stare rozwiazanie bylo zle.
Nowe jest ok. Tylko zmien te K na C bo KLUJE w oczy.
ps: users_structure nie potrzebuje oddzielnego klucza glownego. wystarczy id_users i id_structure jako klucz glowny
Salvation
17.03.2016, 13:50:30
Ah, literówka

wybacz.
Co do tego "PS.", to
id_cs mogę usunąć PRIMARY_KEY (i przypisać go do reszty?), ale muszę zostawić raczej AUTOINCREMENT czy go też usunąć?
nospor
17.03.2016, 13:52:01
Nie, w tabeli wiazacej nie ma zadnego autoincrement. Tam beda trafialy przeciez ID okreslone przez Ciebie
Salvation
17.03.2016, 13:58:17
Czyli tak na prawdę nie potrzeba tej kolumny ID_CS w takim razie. Tylko teraz pytanie czy to się nie będzie gryźć, bo z tego co wiem, jednak potrzeba PRIMARY_KEY w tabeli.
nospor
17.03.2016, 14:00:39
No przeciez mowilem, ze id_cs masz wywalic a klucz glowny storzyc z pol id_user i id_structure
Salvation
17.03.2016, 14:05:14
Dzięki wielkie za zmienienie toku myślenia

można zamknąć.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.