Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z relacjami w mysql
benkas
post 6.11.2006, 19:27:12
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 6.11.2006

Ostrzeżenie: (0%)
-----


witam!!

Tworzę bazę danych i mam takie tabele:

create table dziecko (
id_dziecko INT NOT NULL AUTO_INCREMENT,
imie VARCHAR (15) NOT NULL,
nazwisko VARCHAR (20) NOT NULL,
data_ur DATE NOT NULL,
PRIMARY KEY (id_dziecko)
);

create table adres (
id_adres INT NOT NULL AUTO_INCREMENT,
ulica VARCHAR (25) NOT NULL,
kod_pocztowy VARCHAR (6) NOT NULL,
miejscowosc VARCHAR (25) NOT NULL,
PRIMARY KEY (id_adres)
);

create table pracownik (
id_pracownik INT NOT NULL AUTO_INCREMENT,
imie VARCHAR (15) NOT NULL,
nazwisko VARCHAR (20) NOT NULL,
PRIMARY KEY (id_pracownik)
);

moje pytanie do was jest takie, a mianowicie jak najlepiej zrobić referencje, czy w tabeli adres dodać rekordy: id_dziecko, id_pracownik. Czy lepiej w tabeli dziecko zrobic rekord id_adres i w tabeli pracownik analogicznie też rekord id_adres.

Jeszcze druga prośba jak już zaproponujecie mi stworzenie referencji to napiszcie mi dokładnie jak napisać. dodam, że męcze sie juz drugi dzień i nie wiem gdzie będzie wygodniej dodac i jak dopisac to w kodzie.

Z góry dziekuje.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
KILIUSZKIN
post 7.11.2006, 09:46:31
Post #2





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 26.01.2006

Ostrzeżenie: (0%)
-----


Moim zdaniem baza nie jest za dobrze zbudowana (wydaje mi się, że tabela pracownik powinna być w relacji jeden do wielu z tabelą dziecko), ale niech tam będzie:

Dodałem klucze obce id_adres to tabel: pracownik i dziecko

create table adres (
id_adres INT NOT NULL AUTO_INCREMENT,
ulica VARCHAR (25) NOT NULL,
kod_pocztowy VARCHAR (6) NOT NULL,
miejscowosc VARCHAR (25) NOT NULL,
PRIMARY KEY (id_adres)
);


create table dziecko (
id_dziecko INT NOT NULL AUTO_INCREMENT,
imie VARCHAR (15) NOT NULL,
nazwisko VARCHAR (20) NOT NULL,
data_ur DATE NOT NULL,
id_adres INT NOT NULL,
PRIMARY KEY (id_dziecko),
CONSTRAINT FK_adres1 FOREIGN KEY (id_adres) REFERENCES adres (id_adres)
);

create table pracownik (
id_pracownik INT NOT NULL AUTO_INCREMENT,
imie VARCHAR (15) NOT NULL,
nazwisko VARCHAR (20) NOT NULL,
id_adres INT NOT NULL,
PRIMARY KEY (id_pracownik),
CONSTRAINT FK_adres2 FOREIGN KEY (id_adres) REFERENCES adres (id_adres)
);


--------------------
________________________________________________________________________________
czy programiści używają jeszcze diagramów ? jeśli nie, to tylko zwykli koderzy są ;)
Go to the top of the page
+Quote Post
benkas
post 7.11.2006, 17:39:08
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 6.11.2006

Ostrzeżenie: (0%)
-----


Bardzo dziekuje za odpowiedz, ale zaintrygowało mnie to co napisałeś o tym, ze baza jest źle napisana.

Jak to twoim zdaniem powinno wyglądac poprawnie?questionmark.gif?

Dodam, nie wiem czy to pomoże ale dziecko może być badane przez kilku pracowników i oczywiście pracownik może badać kilka dzieci.

Czyli raczej relacja wiele do wielu (tylko nie wiem jak skonstruować taką relacjie w tych tabelach)questionmark.gifquestionmark.gifquestionmark.gif

Jak tak analizuje to niestety musze się zgodzic ze nie bardzo to wyglada, ale podpowiedzcie jak to poprawić zeby gralo.


W związku z tym doczytałem troche na ten temat i powinienem utworzyć przy tworzeniu tabeli wiele do wielu dwóch relacji jeden-do-wielu z tabelą trzecią np. rejestracją. Tyle teorii a jak wygląda praktyka?

Pozdrawiam!!

..... Chyba udało mi się rozwiązać problem dziękuje za wskazówkę smile.gif.

Ten post edytował benkas 7.11.2006, 20:35:35
Go to the top of the page
+Quote Post
KILIUSZKIN
post 9.11.2006, 09:27:56
Post #4





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 26.01.2006

Ostrzeżenie: (0%)
-----


Tak, zgadza się.
Stwórz dodatkową tabelę, np.

create table rejestracja (
id_rej INT NOT NULL AUTO_INCREMENT,
id_pracownik INT NOT NULL,
id_dziecko INT NOT NULL,
data_wizyty DATE NOT NULL,
opis VARCHAR(50),
PRIMARY KEY (id_rej),
CONSTRAINT FK_rej1 FOREIGN KEY (id_pracownik) REFERENCES pracownik (id_pracownik),
CONSTRAINT FK_rej2 FOREIGN KEY (id_dziecko) REFERENCES dziecko (id_dziecko)
);


--------------------
________________________________________________________________________________
czy programiści używają jeszcze diagramów ? jeśli nie, to tylko zwykli koderzy są ;)
Go to the top of the page
+Quote Post
benkas
post 17.11.2006, 12:02:14
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 6.11.2006

Ostrzeżenie: (0%)
-----


Ma takie małe dodatkowe pytanie.

Po stworzeniu tabel dzieci i adresu, i zrobieniu w nich relacji,

jak sprawdzić czy relacje istnieją, tzn. wydaje mi się ze aby móc usunąc rekord z tabeli dzieci będe musiał najpierw usunąc rekord z tabeli adres. A tak nie jest. Prosze o pomoc czy to oznacza, że relacja nie istnieje.

Czytałem własnie o usuwaniu kaskadowym i dlatego nasuwa się to pytanie, ponieważ dane z tabeli dzieci usuwają się bez polecenia on delete cascade, tak jakby nie były powiązane z tabelą adres.

Odpiszcie, pozdrawiam!!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:15