Jaka to jest relecja?

0

Mam taki kod SQL dla MySQL:

create table jeden
(
tab_id int not null auto_increment,
primary key(tab_id),
cecha varchar(20)
);

create table dwa
(
id int not null auto_increment,
primary key(id),
foreign key(id) references jeden (tab_id),
cecha varchar(10)
);

Czy on tworzy relacje jeden do wielu między tabelami jeden i dwa?

0

tak

1

Ten kod tworzy dwie relacje i ograniczenie integralnościowe w postaci klucza obcego między jedną a drugą.
To ograniczenie może być interpretowane jako swego rodzaju wirtualne powiązanie między tabelami, ale samo w sobie nie jest relacją.

1

Wg mnie nie jeden do wielu a raczej "0 do 1".

0

Dlaczego?

0

Ponieważ w tym momencie sprawa wstawiania do tabeli dwa wygląda trochę chaotycznie. Możesz do niej wstawić element tylko wówczas, gdy w tabeli jeden wstawiłeś już odpowiednią ilość elementów. Klucz obcy w tabeli dwa to równocześnie klucz główny automatycznie inkrementowany.

0

Nawet jesli w tabeli dwa nie miałby auto_increment, ale pozostał by primary key, to i tak pozwoli on tylko na wstawienie dokładnie jednego (co najwyżej) id z tabeli jeden. Dlatego "0 do 1".

0

Czyli jak zmienię kod na:

CREATE TABLE jeden
(
tab_id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(tab_id),
cecha VARCHAR(20)
);

CREATE TABLE dwa
(
id INT NOT NULL AUTO_INCREMENT,
id2 INT NOT NULL,
PRIMARY KEY(id),
FOREIGN KEY(id2) REFERENCES jeden (tab_id),
cecha VARCHAR(10)
);

to będzie relacja jeden do wielu?

0

Tak

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