Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klucz zbiorowy
Forum PHP.pl > Forum > Bazy danych > MySQL
Salvation
Cześć smile.gif
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? smile.gif
markonix
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
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
Zbiorowy to ja slyszalem rozne pojecia na to, ale nie klucz wink.gif

Tabele:
STRUKURA
id
id_nadrzedna
nazwa

USER
id
name
surname
blabla

STRUKTURA_USER - wiaze usera ze struktura
id_struktura
id_user
Salvation
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
A czemu to jest zrobione jako oddzielne tabele? Przeciez to nei ma sensu...
Salvation
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
Cytat
W jednej tabeli i klucz obcy do samej siebie?
Dokladnie.
Salvation
Czyli chodzi o takie rozwiązanie? http://iv.pl/images/09091836863351152204.png
Bo ja rozmyślałem nad takim: http://iv.pl/images/33495087204453087808.png tylko nie wiedziałem jak to połączyć.
nospor
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
Ah, literówka biggrin.gif 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
Nie, w tabeli wiazacej nie ma zadnego autoincrement. Tam beda trafialy przeciez ID okreslone przez Ciebie
Salvation
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
No przeciez mowilem, ze id_cs masz wywalic a klucz glowny storzyc z pol id_user i id_structure
Salvation
Dzięki wielkie za zmienienie toku myślenia smile.gif 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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.