![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 12.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam, na wstępie muszę zaznaczyć że jestem tu nowy
![]() Mój problem polega na tym, że gdy tworzę dwie tabele wraz z relacją jeden do wielu to jakoś nie widzę efektu działania tejże relacji. Przejdźmy do konkretów. Oto przykładowe tabele, które tworzę w bazie:
Nie wiem czy dobrze rozumiem ideę relacji tych dwóch tabel (wyprowadźcie mnie ewentualnie z błędu), ale wydaje mi się, że nie powinno się dać dodać rekordu do tabeli 'pracownik' jeśli zawierał będzie identyfikator 'id_adres', którego nie ma w tabeli 'adres'. A tutaj niestety daje się dodać taki rekord. Podpowiedzcie ja zrobić, żeby nie dało się dodać takiego rekordu no i aby dane kaskadowo usuwały się i aktualizowały. Moja wersja serwera to: 4.0.24_Debian-10sarge2-log Pozdrawiam i z góry dziękuję za pomoc. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
po pierwsze:
Nie okresliles ENGINE=InnoDB, wiec domyslnie poszlo MyISAM, ktore nie posiada relacji ![]() po drugie: przekombinowales. Zakladam ze jeden adres moze byc przypisany tylko do jednego pracownika, wiec robienie na te okazje dwoch tabel jest ciut bezsensu. No chyba ze masz inne zalozenia to przepraszam ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
1.
Bo tworzy ci tabele typu MyISAM, dopiero InnoDB posiadaja wiezy integralnosci
i po problemie. 2. http://dev.mysql.com/doc/refman/5.0/en/inn...onstraints.html ON UPDATE ... , ON CREATE... -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 12.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem to jeszcze raz od początku wraz z linijką
...nie chce mi dodać tabeli pracownik ![]() Macie rację, że przykład pracowników i adresów nie najlepiej kojarzy się z relacjami jeden do wielu. Ale zdecydowanie chodzi mi o relację jeden do wielu. Czyli załóżmy że jeden pracownik może mieć wiele adresów ![]() Pomóżcie... |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat ..nie chce mi dodać tabeli pracownik no a jakie bledy dostajesz? No ijak to dodales?Cytat Czyli załóżmy że jeden pracownik może mieć wiele adresów No ale twoja struktura i tak tego nie odzwierciedla ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
1. zrob obie tabele w InnoDB
2. najpierw utworz ta bez FOREIGN KEYa 3. Cytat Czyli załóżmy że jeden pracownik może mieć wiele adresów . Jak pisal nospor, masz to zle zrobione, na razie jest to: jeden adres ma wielu pracownikow -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 12.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Może zróbmy inaczej...
Napiszcie mi proszę kod, który doda mi do bazy dwie tabele spięte relacją jeden do wielu. Ja spróbuję to "wkeić" i zobaczymy czy zadziała (ew. podam kod błędu). Próbowałem już różnych kombinacji, które nie działały i już się w tym trochę zagubiłem. Powiedzmy niech to będzie tabela 'tematy' i tabela 'posty' (takie mini forum ![]() Czyli tak, żeby nie dało się dodać 'posta' jeśli wpiszemy w polu Idtematu wartość, która nie istnieje w tabeli tematy. Mam nadzieję, że wiecie o co mi chodzi. No i oczywiście jeśli usunę temat, to żeby usunęły się posty z tego tematu. Zrobiłem tak jak mówiliście, stworzyłem tabele Innodb bez FOREIGN KEYa. Dało radę. Ale kiedy piszę:
to wyskakuje
Co robię nie tak? Pomóżcie proszę. P.S. Niech zostanie jeden adres dla wielu pracowników. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
ehh, pisalem ze wystarczy dodac typ tabeli
-------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 12.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Po wklejeniu drugiej tabeli mam
I właśnie z tym mam problem ![]() Jeśli zrobię
Jest OK. Dlaczego kiedy próbuję dodać później relację instrukcją:
otrzymuję
OK, poradziłem sobie. Znalazłem na stronie, którą podał mi dr_bonzo. Takie coś zadziałało:
Dzięki Ci dr_bonzo. Mogę się edukować dalej ![]() Pozdrawiam wszystkich |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 28.06.2025 - 22:34 |