MySQL 4.1 Foreign key z wartością null
Jarosław Ziółkowski - 12-11-2006 00:36
MySQL 4.1 Foreign key z wartością null
Witam, mam taką zagwozdkę
posiadam trzy tabele
Kategorie która ma swoje ID i nazwe id jest zdefiniowane jako primary key i jest automatycznie inkrementowane
Następna tabela to podkategorie ma ona swoje id które jest autormatycznie inkrementowane, jest również kluczem głównym tableli. Jest tez oczywiście nazwa no i Identyfikator kategorii który jest kluczem obcym. Musi być zgony z kolumną id tablei kategorie.
Do tej pory wszystko idzie świetnie bo jeśli kategoria nie ma podkategorii to nie muszę niczego dodawać do drugiej tabeli.
Jest jednak jeszcze jedna tabela Artykuły:
No i poza polami takimi jak data, tresc czy tytuł ma Identyfikator artykułu jako klucz główny, Identyfikator kategorii klucz obcy w kategorii orazidentyfikator Podkategorii klucz obcy w tabeli Podkategorie
No i to właśnie mój problem. Identyfikator Kategorii nigdy nie będzie pusty bo artykuł musi należeć do kategorii, ale jeśli kategoria nie ma podkategoii chciałbym aby to pole miało wartość null. Niestety kiedy jest kluczem obcym nie może mieć takiej wartości bo MySQL zaraz zgłasza błąd przy próbie dodania innej wartości niż jakaś istniejąca w Podkategoriach(wiem że prawidłowo robi), ale nie mam pomysłu jak to obejść poza tym żeby nie powiązać tych tabel, ale to mi się nie podoba.
pozdrawiam.
Radosław Witkowicki - 12-11-2006 00:36
Jarosław Ziółkowski napisał(a): > Witam, mam taką zagwozdkę > > posiadam trzy tabele > > Kategorie która ma swoje ID i nazwe id jest zdefiniowane jako primary > key i jest automatycznie inkrementowane > > Następna tabela to podkategorie ma ona swoje id które jest > autormatycznie inkrementowane, jest również kluczem głównym tableli. > Jest tez oczywiście nazwa no i Identyfikator kategorii który jest > kluczem obcym. Musi być zgony z kolumną id tablei kategorie. > > Do tej pory wszystko idzie świetnie bo jeśli kategoria nie ma > podkategorii to nie muszę niczego dodawać do drugiej tabeli. > > Jest jednak jeszcze jedna tabela Artykuły: > > No i poza polami takimi jak data, tresc czy tytuł ma > Identyfikator artykułu jako klucz główny, Identyfikator kategorii klucz > obcy w kategorii orazidentyfikator Podkategorii klucz obcy w tabeli > Podkategorie > > No i to właśnie mój problem. Identyfikator Kategorii nigdy nie będzie > pusty bo artykuł musi należeć do kategorii, ale jeśli kategoria nie ma > podkategoii chciałbym aby to pole miało wartość null. Niestety kiedy > jest kluczem obcym nie może mieć takiej wartości bo MySQL zaraz zgłasza > błąd przy próbie dodania innej wartości niż jakaś istniejąca w > Podkategoriach(wiem że prawidłowo robi), ale nie mam pomysłu jak to > obejść poza tym żeby nie powiązać tych tabel, ale to mi się nie podoba. > > pozdrawiam.
Po pierwsze lepiej nigdy nie opisuj tabel, tylko wklej strukturę, tutaj nikomu nie chcę się czytać wywodów. Po drugie Forigen Key ma być null !?!?!?!?!?!?!?!?!?!? Człowieku, no comment.
Jarosław Ziółkowski - 12-11-2006 00:37
> Po pierwsze lepiej nigdy nie opisuj tabel, tylko wklej strukturę, tutaj > nikomu nie chcę się czytać wywodów. > Po drugie Forigen Key ma być null !?!?!?!?!?!?!?!?!?!? Człowieku, no > comment.
No właśnie z tego powodu że nie może nie wiem jak to rozwiązać. A struktura tabel to:
Kategorie: IdentyfikatorKategorii int not null auto_increment primary key NazwaKategorii varchar(32) not null unique
Podkategorie:
IdentyfikatorPodkategorii int not null auto_increment primary key IdentyfikatorKategorii int null foreign key references Kategorie(IdentyfikatorKategorii) NazwaPodkategorii varchar(32) not null unique(IdentyfikatorKategorii, NazwaKategorii)
Artykuły:
IdentyfikatorArtykułu int not null auto_increment primary key IdentyfikatorKategorii int null foreign key references Kategorie(IdentyfikatorKategorii)
PROBLEM!!! IdentyfikatorPodkategorii int null foreign key references podkategorie(IdentyfikatorPodkategorii)
dalej jest juz tresc, data dodania i nie ma z tym problemu.
No i nie wiem jak rozwiązać problem z tym że foreign nie może być null. Jak powiązać te tabele żeby Identyfikator podkatoegorii a artykułach mógł być pusty. Tzn opcja kiedy kategoria już na nic się nie dzieli.
Wojtek pBT - 12-11-2006 00:37
Dnia 21-09-2006 o 20:17:15 Jarosław Ziółkowski <ziolkowski_jaroslaw@o2.pl> napisał(a):
> >> Po pierwsze lepiej nigdy nie opisuj tabel, tylko wklej strukturę, tutaj >> nikomu nie chcę się czytać wywodów. >> Po drugie Forigen Key ma być null !?!?!?!?!?!?!?!?!?!? Człowieku, no >> comment.
> Artykuły: > .... > > PROBLEM!!! IdentyfikatorPodkategorii int null foreign key references > podkategorie(IdentyfikatorPodkategorii)
Nie wiem, może się nie znam, ale dla mnie ta definicja nie wygląda na poprawną... Może to będzie lapsze... IdentyfikatorPodkategorii int foreign key references podkategorie(IdentyfikatorPodkategorii)
> > dalej jest juz tresc, data dodania i nie ma z tym problemu. > > No i nie wiem jak rozwiązać problem z tym że foreign nie może być null.
A czemu nie może być NULL?? FOREIGN może być albo wartością istniejącą w tabeli do kórej się odnosi, albo NULLem
http://forum.mysql.com/doc/refman/4....nstraints.html
pBT
-- Używam klienta poczty Opera Mail: http://www.opera.com/mail/
Jarosław Ziółkowski - 12-11-2006 00:37
Wojtek pBT napisał(a): > Dnia 21-09-2006 o 20:17:15 Jarosław Ziółkowski > <ziolkowski_jaroslaw@o2.pl> napisał(a): > >> >>> Po pierwsze lepiej nigdy nie opisuj tabel, tylko wklej strukturę, >>> tutaj nikomu nie chcę się czytać wywodów. >>> Po drugie Forigen Key ma być null !?!?!?!?!?!?!?!?!?!? Człowieku, no >>> comment. > > >> Artykuły: >> > ... > >> >> PROBLEM!!! IdentyfikatorPodkategorii int null foreign key references >> podkategorie(IdentyfikatorPodkategorii) > > > > Nie wiem, może się nie znam, ale dla mnie ta definicja nie wygląda na > poprawną... > Może to będzie lapsze... > IdentyfikatorPodkategorii int foreign key references > podkategorie(IdentyfikatorPodkategorii) > > > >> >> dalej jest juz tresc, data dodania i nie ma z tym problemu. >> >> No i nie wiem jak rozwiązać problem z tym że foreign nie może być null. > > > A czemu nie może być NULL?? FOREIGN może być albo wartością istniejącą > w tabeli do kórej się odnosi, albo NULLem > > http://forum.mysql.com/doc/refman/4....nstraints.html > > > pBT > > Ta definicja miała pokazać do czego odnosi się ten klucz a nie była odwzorowanie kodu który ją tworzył.
No problem polega na tym że jeśli jest null to mysql wywala błąd z wielkim hukiem.
Paweł Matejski - 12-11-2006 00:37
Jarosław Ziółkowski wrote: > > No problem polega na tym że jeśli jest null to mysql wywala błąd z > wielkim hukiem.
To może zatyczki do uszu pomogą, albo materac pod mysql'a?
P.S. Tu nie pl.rec.poezja - komunikat błędu podaj! P.S.2. IMHO masz złą strukturę. Zaimplementuj to jako drzewo kategorii. (w FAQ jest jak). -- P.M.
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_?=
[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.pldoc.pisz.plpdf.pisz.pllatwa-kasiora.pev.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 |
|