ďťż
 
[MySQL] Wspolny primary key dla dwoch tabeli? ďťż
 
[MySQL] Wspolny primary key dla dwoch tabeli?
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • morebeer.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com