ďťż
 
[Mysql] primary & foreign key ďťż
 
[Mysql] primary & foreign key
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] primary & foreign key



Ania - 27-10-2005 23:57
[Mysql] primary & foreign key
  Witam,

Mam problem z utworzeniem tabeli z 1 zlożonym kluczem podstawowym i
dwoma obcymi w mysql.
Udało mi się np. utworzyć tabelkę w ten sposób (1 primary key i 1
foreign key):
mysql> CREATE TABLE Zamowienia (zam_numer INTEGER NOT NULL PRIMARY KEY,
zam_data DATETIME NOT NULL, kl_id CHAR(10) NOT NULL, INDEX(kl_id),
FOREIGN KEY (kl_id) REFERENCES Klienci (kl_id) ON UPDATE CASCADE ON
DELETE RESTRICT) TYPE=INNODB;

a nie mogę utworzyć tabeli (2 foreign key i 1 złożony primary key):
mysql> CREATE TABLE ElementyZamowienia (zam_number INTEGER NOT NULL,
zam_element INTEGER NOT NULL, prod_id CHAR(10) NOT NULL, ilosc INTEGER
NOT NULL, cena_elem DECIMAL(8,2) NOT NULL, INDEX(zam_number), FOREIGN
KEY (zam_number) REFERENCES Zamowienia(zam_number) ON UPDATE CASCADE ON
DELETE RESTRICT, PRIMARY KEY (zam_number, zam_element), INDEX(prod_id),
FOREIGN KEY (prod_id) REFERENCES Produkty(prod_id) ON UPDATE CASCADE ON
DELETE RESTRICT) TYPE=INNODB;

Tabele Klienci, Produkty, Zamowienia są typu INNODB.

show innodb status pokazuje:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
051027 16:34:57 Error in foreign key constraint of table
`sqloko/ElementyZamowienia`:
FOREIGN KEY (zam_number) REFERENCES Zamowienia(zam_number) ON UPDATE
CASCADE ON DELETE RESTRICT, PRIMARY KEY (zam_number, zam_element),
INDEX(prod_id), FOREIGN KEY (prod_id) REFERENCES Produkty(prod_id) ON
UPDATE CASCADE ON DELETE RESTRICT) TYPE=INNODB:
Cannot resolve column name close to:
) ON UPDATE CASCADE ON DELETE RESTRICT, PRIMARY KEY (zam_number,
zam_element), INDEX(prod_id), FOREIGN KEY (prod_id) REFERENCES
Produkty(prod_id) ON UPDATE CASCADE ON DELETE RESTRICT) TYPE=INNODB

Co robię źle? Jak poprawnie utworzyć taką tabelę?

pozdrawiam
Ania

--
"Hello," he lied.
-- Don Carpenter, quoting a Hollywood agent





artiun - 27-10-2005 23:57

  Ania napisał(a):
> Witam,
>
> Mam problem z utworzeniem tabeli z 1 zlożonym kluczem podstawowym i
> dwoma obcymi w mysql.
> Udało mi się np. utworzyć tabelkę w ten sposób (1 primary key i 1
> foreign key):
> mysql> CREATE TABLE Zamowienia (zam_numer INTEGER NOT NULL PRIMARY KEY,
> zam_data DATETIME NOT NULL, kl_id CHAR(10) NOT NULL, INDEX(kl_id),
> FOREIGN KEY (kl_id) REFERENCES Klienci (kl_id) ON UPDATE CASCADE ON
> DELETE RESTRICT) TYPE=INNODB;
>
> a nie mogę utworzyć tabeli (2 foreign key i 1 złożony primary key):
> mysql> CREATE TABLE ElementyZamowienia (zam_number INTEGER NOT NULL,
> zam_element INTEGER NOT NULL, prod_id CHAR(10) NOT NULL, ilosc INTEGER
> NOT NULL, cena_elem DECIMAL(8,2) NOT NULL, INDEX(zam_number), FOREIGN
> KEY (zam_number) REFERENCES Zamowienia(zam_number) ON UPDATE CASCADE ON
> DELETE RESTRICT, PRIMARY KEY (zam_number, zam_element), INDEX(prod_id),
> FOREIGN KEY (prod_id) REFERENCES Produkty(prod_id) ON UPDATE CASCADE ON
> DELETE RESTRICT) TYPE=INNODB;
>
> Tabele Klienci, Produkty, Zamowienia są typu INNODB.
>
> show innodb status pokazuje:
> ------------------------
> LATEST FOREIGN KEY ERROR
> ------------------------
> 051027 16:34:57 Error in foreign key constraint of table
> `sqloko/ElementyZamowienia`:
> FOREIGN KEY (zam_number) REFERENCES Zamowienia(zam_number) ON UPDATE
masz
> CASCADE ON DELETE RESTRICT, PRIMARY KEY (zam_number, zam_element),
> INDEX(prod_id), FOREIGN KEY (prod_id) REFERENCES Produkty(prod_id) ON
Czy zam_element to to samo co prod_id?
raczej id pozycji (produkt się może powtórzyć) i pewnie tu siadło
Klient bierze np. 5l farby (iałej - emalii), a potem domawia tę samą farbę w
ilości 2l (białej emalii, nie tej wodnej, która obok stała) - to siada.
Sumuje się na fakturze ( winnym wypadku 2 na fakturze).
> UPDATE CASCADE ON DELETE RESTRICT) TYPE=INNODB:
> Cannot resolve column name close to:
> ) ON UPDATE CASCADE ON DELETE RESTRICT, PRIMARY KEY (zam_number,
> zam_element), INDEX(prod_id), FOREIGN KEY (prod_id) REFERENCES
a po co
> Produkty(prod_id) ON UPDATE CASCADE ON DELETE RESTRICT) TYPE=INNODB
pogubione..
--
Artur




Ania - 27-10-2005 23:57

  [pl.comp.bazy-danych] On Thu, 27 Oct 2005 16:52:51 +0200,
artiun <artiun@wp.pl> wrote:
>> a nie mogę utworzyć tabeli (2 foreign key i 1 złożony primary key):
>> mysql> CREATE TABLE ElementyZamowienia (zam_number INTEGER NOT NULL,
>> zam_element INTEGER NOT NULL, prod_id CHAR(10) NOT NULL, ilosc INTEGER
>> NOT NULL, cena_elem DECIMAL(8,2) NOT NULL, INDEX(zam_number), FOREIGN
>> KEY (zam_number) REFERENCES Zamowienia(zam_number) ON UPDATE CASCADE ON
>> DELETE RESTRICT, PRIMARY KEY (zam_number, zam_element), INDEX(prod_id),
>> FOREIGN KEY (prod_id) REFERENCES Produkty(prod_id) ON UPDATE CASCADE ON
>> DELETE RESTRICT) TYPE=INNODB;
>>
>> Tabele Klienci, Produkty, Zamowienia są typu INNODB.
>>
>> show innodb status pokazuje:
>> ------------------------
>> LATEST FOREIGN KEY ERROR
>> ------------------------
>> 051027 16:34:57 Error in foreign key constraint of table
>> `sqloko/ElementyZamowienia`:
>> FOREIGN KEY (zam_number) REFERENCES Zamowienia(zam_number) ON UPDATE
> masz
>> CASCADE ON DELETE RESTRICT, PRIMARY KEY (zam_number, zam_element),
>> INDEX(prod_id), FOREIGN KEY (prod_id) REFERENCES Produkty(prod_id) ON
> Czy zam_element to to samo co prod_id?

To nie to samo, zam_element zależny jest od liczby produktów w
zamówieniu, np 3 produkty, zamówienie 1 - PRI (11, 12, 13).

> raczej id pozycji (produkt się może powtórzyć) i pewnie tu siadło
> Klient bierze np. 5l farby (iałej - emalii), a potem domawia tę samą farbę w
> ilości 2l (białej emalii, nie tej wodnej, która obok stała) - to siada.
> Sumuje się na fakturze ( winnym wypadku 2 na fakturze).
>> UPDATE CASCADE ON DELETE RESTRICT) TYPE=INNODB:
>> Cannot resolve column name close to:
>> ) ON UPDATE CASCADE ON DELETE RESTRICT, PRIMARY KEY (zam_number,
>> zam_element), INDEX(prod_id), FOREIGN KEY (prod_id) REFERENCES
> a po co
>> Produkty(prod_id) ON UPDATE CASCADE ON DELETE RESTRICT) TYPE=INNODB
> pogubione..

Teraz widzę, że ze mało informacji podałam:
Tabela Zamowienia - primary key: zam_number
Tabela Produkty - primary key: prod_id
Tabela ElementyZamowienia - primary key (zam_number, zam_element)

pozdrawiam
Ania

--
Odets, where is thy sting?
-- George S. Kaufman




artiun - 27-10-2005 23:58

  Ania napisał(a):
> Teraz widzę, że ze mało informacji podałam:
> Tabela Zamowienia - primary key: zam_number
> Tabela Produkty - primary key: prod_id
> Tabela ElementyZamowienia - primary key (zam_number, zam_element)
A. > Tabela Produkty - primary key: prod_id
B. > Tabela ElementyZamowienia - primary key (zam_number, zam_element)

To może tak: A - to miejsce skąd brane (prod_id) na pozycje: Tabela
ElementyZamowienia (dokładnie na pole: zam_element *czyli lp i id - nie wiem
jak za jednym razem - przeczytaj - na stanowsku roboczym 2x biorę ten sam
towar, rozmyśliłem się zamiast litra biorę 2, zrobisz sobie zapytanie (z
gruntu złe) i wyjdzie Ci litr, Ty się nie sprzeczaj popraw założenia). To
wybacz, ten kto to zobaczy, kiedy Ty się zwolnisz będzie na Tobie psy wieszał.

--
Artur





Ania - 27-10-2005 23:58

  [pl.comp.bazy-danych] On Thu, 27 Oct 2005 18:07:21 +0200,
artiun <artiun@wp.pl> wrote:
> To może tak: A - to miejsce skąd brane (prod_id) na pozycje: Tabela
> ElementyZamowienia (dokładnie na pole: zam_element *czyli lp i id - nie wiem
> jak za jednym razem - przeczytaj - na stanowsku roboczym 2x biorę ten sam
> towar, rozmyśliłem się zamiast litra biorę 2, zrobisz sobie zapytanie (z
> gruntu złe) i wyjdzie Ci litr, Ty się nie sprzeczaj popraw założenia). To
> wybacz, ten kto to zobaczy, kiedy Ty się zwolnisz będzie na Tobie psy wieszał.

Genaralnie dzięki za pomoc i za zainteresowanie, ale to nie baza
produkcyjna, ale do przetestowania przykładów z książki, które zrobione
są na tej bazie.
Testowałam to trochę i okazało się, że zapytanie było od początku dobre,
tyle że zrobiłam literówkę. :) zam_number zamiast zam_numer :)

pozdrawiam
Ania

--
What does education often do? It makes a straight cut ditch of a
free meandering brook.
-- Henry David Thoreau
  • 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_?= [MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?= [MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?= 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?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • chinska-zupka.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