Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Klucz zbiorowy
Salvation
post
Post #1





Grupa: Zarejestrowani
Postów: 406
Pomógł: 73
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


Cześć (IMG:style_emoticons/default/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? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
markonix
post
Post #2





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Salvation
post
Post #3





Grupa: Zarejestrowani
Postów: 406
Pomógł: 73
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Zbiorowy to ja slyszalem rozne pojecia na to, ale nie klucz (IMG:style_emoticons/default/wink.gif)

Tabele:
STRUKURA
id
id_nadrzedna
nazwa

USER
id
name
surname
blabla

STRUKTURA_USER - wiaze usera ze struktura
id_struktura
id_user
Go to the top of the page
+Quote Post
Salvation
post
Post #5





Grupa: Zarejestrowani
Postów: 406
Pomógł: 73
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




A czemu to jest zrobione jako oddzielne tabele? Przeciez to nei ma sensu...
Go to the top of the page
+Quote Post
Salvation
post
Post #7





Grupa: Zarejestrowani
Postów: 406
Pomógł: 73
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
W jednej tabeli i klucz obcy do samej siebie?
Dokladnie.
Go to the top of the page
+Quote Post
Salvation
post
Post #9





Grupa: Zarejestrowani
Postów: 406
Pomógł: 73
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


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ć.

Ten post edytował Salvation 17.03.2016, 13:45:41
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
Salvation
post
Post #11





Grupa: Zarejestrowani
Postów: 406
Pomógł: 73
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


Ah, literówka (IMG:style_emoticons/default/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ąć?
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Nie, w tabeli wiazacej nie ma zadnego autoincrement. Tam beda trafialy przeciez ID okreslone przez Ciebie
Go to the top of the page
+Quote Post
Salvation
post
Post #13





Grupa: Zarejestrowani
Postów: 406
Pomógł: 73
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




No przeciez mowilem, ze id_cs masz wywalic a klucz glowny storzyc z pol id_user i id_structure
Go to the top of the page
+Quote Post
Salvation
post
Post #15





Grupa: Zarejestrowani
Postów: 406
Pomógł: 73
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


Dzięki wielkie za zmienienie toku myślenia (IMG:style_emoticons/default/smile.gif) można zamknąć.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 02:18