We are in the process of migrating this forum. A new space will be available soon. We are sorry for the inconvenience.

Relacje w MySql


sLoDkI
25-03-2008, 10:19
Cytat Napisał delvin
Witam wszystkich,
chciałbym się zapytać o pewną rzecz nurtującą mnie już od dłuższego czasu, na którą nigdzie nie mogę znaleźć konkretnej odpowiedzi.
Chciałbym się dowiedzieć czy MYSQL można tworzyć relacje między tabelami które automatycznie się uzupełniają.
Możesz na kilka sposobów, m.in. poprzez triggery:
http://dev.mysql.com/doc/refman/5.0/en/triggers.html

Chodzi mi o cos takiego:

Tabela Imie
Id_imie INT PRIMARY KEY
Id_nazwisko INT
Imie CHAR(20)


Tabela Nazwisko
Id_nazwisko INT PRIMARY KEY
Id_imie INT
nazwisko CHAR(20)

Pole Id_imie i Id_nazwisko posiadaja jeszcze auto_increment, chodzi mi teraz o to zeby po dodaniu do tabeli Imienia maciek, pole Id_nazwisko w tabeli imie automatycznie pobralo wartosc z tabeli Nazwisko z pola Id_imie takim samym ID jak maciek i przypisalo do Id_nazwisko w tabeli imie.
(...) zastanawiam się czy to ja muszę ciągle sam sprawdzac kto ma jakie Id i samemu to wpisywyac ?? (...)
Nie. Pierwsze pytanie: co chcesz osiągnąć? Dlaczego Imie i Nazwisko jako osobne tabele? Jeżeli musisz, to lepiej połączyć je przy pomocy innej tabeli, np.:

Kod:
tab_osoba:
id_osoba INT NOT NULL,
id_imie INT NOT NULL,
id_nazwisko INT NOT NULL,
PRIMARY KEY (id_osoba)

tab_imie:
id_imie INT AUTO_INCREMENT,
imie VARCHAR(30) NOT NULL,
PRIMARY KEY(id_imie)

tab_nazwisko:
id_nazwisko INT NOT NULL AUTO_INCREMENT,
nazwisko VARCHAR(50) NOT NULL,
PRIMARY KEY(id_nazwisko)
I wtedy po dodaniu danych do tab_imie i tab_nazwisko id_imie i id_nazwisko dodajesz do tab_osoba. Możesz to zrobić po stronie skryptu (funkcja), lub po stronie BD (np. trigger).
Jeszcze bardziej automatyzując można pobawić się z kluczami obcymi (foreign keys), jednak trzeba ustawić silnik BD na InnoDB. Wtedy np. aktualizując dane w jednej tabeli klucze w pozostałych są automatycznie aktualizowane.

Pozdrawiam.

bob123
25-03-2008, 10:02
http://dev.mysql.com/doc/refman/5.0/...-triggers.html

delvin
24-03-2008, 11:32
Witam wszystkich,
chciałbym się zapytać o pewną rzecz nurtującą mnie już od dłuższego czasu, na którą nigdzie nie mogę znaleźć konkretnej odpowiedzi.
Chciałbym się dowiedzieć czy MYSQL można tworzyć relacje między tabelami które automatycznie się uzupełniają.

Chodzi mi o cos takiego:

Tabela Imie
Id_imie INT PRIMARY KEY
Id_nazwisko INT
Imie CHAR(20)


Tabela Nazwisko
Id_nazwisko INT PRIMARY KEY
Id_imie INT
nazwisko CHAR(20)

Pole Id_imie i Id_nazwisko posiadaja jeszcze auto_increment, chodzi mi teraz o to zeby po dodaniu do tabeli Imienia maciek, pole Id_nazwisko w tabeli imie automatycznie pobralo wartosc z tabeli Nazwisko z pola Id_imie takim samym ID jak maciek i przypisalo do Id_nazwisko w tabeli imie.
Jestem początkującym SQLowiczem ;-) i nie jestem w stanie poradzić sobie z tym problemem, zastanawiam się czy to ja muszę ciągle sam sprawdzac kto ma jakie Id i samemu to wpisywyac ?? to by bylo bez sensu.... mam nadzieję że pomoże mi ktoś wyjasnić ten problem.
Prosilbym o konkretne rozwiązanie.
Pozdro i thnx.