Klucze obce i ograniczenia

0

Mógłby ktoś napisać jak interpretować ograniczenia kluczy obcych? Kiedy można usunąć wiersz z tabeli a kiedy nie można? Poniżej zamieszczam przykład który nie jest dla mnie jasny :(

Tworze 2 tabele i jedna ma przypisany klucz obcy który pozwala łączyć tabele ale która tabela jest nadrzędna a która podrzędna?

create table funkcje (
  idf int not null auto_increment,
  nazwa varchar(20) not null,
  poziom int not null,
  primary key (idf)
);

create table pracownicy (
  idp int not null auto_increment,
  nazwisko varchar(20) not null,
  idf int,
  primary key (idp),
  foreign key (idf) references funkcje (idf)
  on delete restrict
  on update cascade
);
0
CREATE TABLE funkcje (
  idf INT NOT NULL AUTO_INCREMENT,
  nazwa VARCHAR(20) NOT NULL,
  poziom INT NOT NULL,
  PRIMARY KEY (idf)
);

CREATE TABLE pracownicy (
  idp INT NOT NULL AUTO_INCREMENT,
  nazwisko VARCHAR(20) NOT NULL,
  idf INT,
  PRIMARY KEY (idp),
  FOREIGN KEY (idf) REFERENCES funkcje (idf)
  ON DELETE RESTRICT
  ON UPDATE cascade
);

funkcje - nadrzedna
pracownicy - podrzedna jezeli tak to rozumiesz

0
Szalony Ogrodnik napisał(a):

ale która tabela jest nadrzędna a która podrzędna?

nie ma czegoś takiego jak nadrzędna i podrzędna tabela (przynajmniej nie w tym kontekście). W Twoim przykładzie pole idf tabeli pracownicy musi zawierać jedną z wartości z pola idf tabeli funkcje lub wartość null. Natomiast co do ograniczeń to
ON DELETE RESTRICT powoduje, że nie wolno usunąć rekordu z funkcje jeśli odwołuje się do niego pole idf z tabeli pracownicy
ON UPDATE cascade zmiana wartości pola idf w tabeli funkcje spowoduje automatyczne jej zaktualizowanie w polu idf tabeli pracownicy (co nawiasem mówiąc jest bez sensu bo id z założenia się nie zmienia)

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