mySql i kilka tabel

0

Witam,

Mam pytanie jak zrobić działające relacje na kilku tabelach w phpMyadmin?
A więc:

tabela A:
osoba_id | nazwa_osoby |
---------+--------------+
1 | osoba1 |
---------+--------------+
2 | osoba2 |
---------+--------------+

tabela B:
czynnosci_id | nazwa_czynnosci | przyjal_czynnosc(osoba_id) | wykonal_czynnosc(osoba_id) |
-------------+-----------------+---------------------------+-----------------------------+
1 | czynnosc1 | osoba1 | osoba2 |
-------------+-----------------+---------------------------+-----------------------------+
2 | czynnosc2 | osoba2 | osoba1 |
-------------+-----------------+---------------------------+-----------------------------+

Tabele mam połączone 1 do wielu: tabelaA->osoba_id z tabelaB->przyjal i tabelaB->wykonal. Tak jak na schemacie tabel.

Czyli jak połączyć te dwie tabele w phpMyadmin? Ja kiedy próbuje zrobić relację tak jak należy to pojawia się błąd:
#1452 - Cannot add or update a child row: a foreign key constraint fails

nie wiem jak to rozwiązać.

Dziękuję za szybka odpowiedź.

Krzysiek

1

Co to znaczy jak należy? Przez FOREIGN KEY ...? TO chyba jedyna słuszna droga... Z tym ogrniczeniem, ze indeksy musisz miec. Czasem nawet unikalne, bądź PRIMARY.

0

Czyli jak to połączyć aby ten błąd przestał wyskakiwać?

1

https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html

Czyli aby utworzyć FK między tabelą B a A:

ALTER TABLE tabelaB
    ADD CONSTRAINT FK_PRZYJAL_CZYNNOSC
    FOREIGN KEY (przyjal_czynnosc)
    REFERENCES tabelaA (osoba_id)

ALTER TABLE tabelaB
    ADD CONSTRAINT FK_WYKOANL_CZYNNOSC
    FOREIGN KEY (wykonal_czynnosc)
    REFERENCES tabelaA (osoba_id)
 

Ale błąd jaki otrzymujesz wskazuje że ty masz problem przy wstawianiu rekordu. Chcesz użyć gdzieś id rekordu który nie istnieje. Jeśli do tabeli B chcesz wstawić rekord z jakimś osoba_id w polu przyjął lub wykonał czynność, to ta osoba (o takim id) musi już istnieć w tabeli A.

Czyli najpierw
insert into TabelaA values (3, 'Kowalski')
a następnie
insert into TabelaB values (10, 'jakas czynność', 3, 2)

0

Dziękuję za pomoc i poświęcony czas. Miałem ustawione tak jak napisałeś, ale błąd był właśnie przy wstawianiu rekordu. Przyjal i wykonal miałem ustawione aby wartość nie była null. Ustawiłem wykonal na null i już dodaje rekordy. Wykonal ma sluzyc juz po wykonaniu czynności czyli przy edycji:)
Jeszcze raz dzięki:)

Pozdrowionka i Wesołych Świąt
Krzysiek

1 użytkowników online, w tym zalogowanych: 0, gości: 1