[MySQL] Wspolny primary key dla dwoch tabeli?
TT - 06-11-2007 00:02
[MySQL] Wspolny primary key dla dwoch tabeli?
Witam,
Znalazlem sie w sytuacji, w ktorej musze uzyc dwoch tabel ktore maja wspolny klucz podstawowy typu autoincrement. Dzialac to ma mniej wiecej tak, ze mamy jedna tabele User:
User { user_id: integer, name : varchar(30) }
I druga:
SystemUser { user_id: integer, name : varchar(30) (.. i sporo innych danych) }
Szacuje, ze na kazdego SystemUsera bedzie przypadalo ok. 300 userow. Nie widze wiec sensu pakowania ich wszystkich do jednej tabeli SystemUser z jakas flaga, ze to nie sa pelnoprawni uzytkownicy, pozniewaz mialbym mnostwo niewykorzystanych pol.
Jedyne, co przychodzi do glowy to stworzenie dwoch tabel i uzywanie w jakis sposob tej samej numeracji user_id (tzn. ze jesli w jednej ostatnie user_id to 30 to insert do drugiej bedzie mial user_id 31).
Sadzicie, ze takie rozwiazanie ma sens? Jesli tak to jak to zrobic (google nie zwraca odpowiedzi, albo ja zle pytam) i jak to sie bedzie mialo do wielowatkowosci.
Dzieki za pomoc, TT
Szymon - 06-11-2007 00:02
TT pisze: > Witam, > > Znalazlem sie w sytuacji, w ktorej musze uzyc dwoch tabel ktore maja > wspolny klucz podstawowy typu autoincrement. > Dzialac to ma mniej wiecej tak, ze mamy jedna tabele User: > > User { > user_id: integer, > name : varchar(30) > } > > I druga: > > SystemUser { > user_id: integer, > name : varchar(30) > (.. i sporo innych danych) > } > > Szacuje, ze na kazdego SystemUsera bedzie przypadalo ok. 300 userow. Nie > widze wiec sensu pakowania ich wszystkich do jednej tabeli SystemUser z > jakas flaga, ze to nie sa pelnoprawni uzytkownicy, pozniewaz mialbym > mnostwo niewykorzystanych pol. > > Jedyne, co przychodzi do glowy to stworzenie dwoch tabel i uzywanie w > jakis sposob tej samej numeracji user_id (tzn. ze jesli w jednej > ostatnie user_id to 30 to insert do drugiej bedzie mial user_id 31). > > Sadzicie, ze takie rozwiazanie ma sens? Jesli tak to jak to zrobic > (google nie zwraca odpowiedzi, albo ja zle pytam) i jak to sie bedzie > mialo do wielowatkowosci. > > Dzieki za pomoc, > TT
Nie ma sensu, jak potem powiążesz w innej tabeli coś takiego jako klucz obcy? Klucz obcy do dwóch tabel? To już lepiej tak:
User { user_id: integer, name : varchar(30) }
SystemUser { user_id: integer references user.user_id, (.. i sporo innych danych) }
W ten sposób jak chcesz mieć w innej tabeli klucz obcy do usera, to robisz klucz do tabeli Users. Jak chcesz mieć użytkownika systemowego to tworzysz dodatkowo rekord w tabeli SystemUser. Jak chcesz sprawdzić czy user jest użytkownikiem systemowym, to albo robisz w tabeli User dodatkowe pole z typem użytkownika, albo robisz proste sprawdzenie czy jest coś w tabei SystemUser na temat tego użytkownika.
Szymon
TT - 07-11-2007 00:02
Szymon pisze: > Nie ma sensu, jak potem powiążesz w innej tabeli coś takiego jako klucz > obcy? Klucz obcy do dwóch tabel? > To już lepiej tak:
Dzieki za szybka odpowiedz. Ostatecznie stwierdzilem, ze mozna to zrobic nieco inaczej i w pewnych przypadkach po prostu dodatkowa tabela rozszerza podstawowa, dzieki czemu nie mam problemow z kluczem ani redundacja.
Pozdro, TT
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?=
[mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?=
[MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?=
[mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?=
Gdzie MySQL 4.1, a gdzie 5.0?
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=
[MS SQL] "set names" (mySQL) w MS SQL
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
[MySQL] Czy da =?ISO-8859-2?Q?si=EA_wykonac_takie_powi=B1z?==?ISO-8859-2?Q?anie_mi=EAdzy_tabelami=2C_i_jak_to_odpyta=E6_? ==?ISO-8859-2?Q?=3F?=
Import za =?ISO-8859-2?Q?pomoc=B1_EMS_Data_Import_for_?==?ISO-8859-2?Q?MySQL_-_polskie_litery=2E?=
zanotowane.pldoc.pisz.plpdf.pisz.plmorebeer.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 |
|