FOREIGN KEY relacja jeden do wielu

0

Według tej strony http://pl.wikibooks.org/wiki/PHP/Relacje_i_indeksy ten kod:

CREATE TABLE `kategorie` (
  `id` mediumint(9) NOT NULL AUTO_INCREMENT,
  `nazwa` VARCHAR(40) NOT NULL,
  `il_ksiazek` mediumint(9) DEFAULT NULL,
  PRIMARY KEY  (`id`),
  KEY `il_ksiazek` (`il_ksiazek`)
) ENGINE=InnoDB;
 
INSERT INTO `kategorie` VALUES (1, 'Literatura polska', 4);
INSERT INTO `kategorie` VALUES (2, 'Literatura zagraniczna', 2);
 
CREATE TABLE `ksiazki` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `nazwa` VARCHAR(100) NOT NULL,
  `wydawnictwo` VARCHAR(50) NOT NULL,
  `cena` FLOAT NOT NULL DEFAULT '0',
  `kategoria_id` mediumint(9) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `kategoria_id` (`kategoria_id`)
) ENGINE=InnoDB;
 
INSERT INTO `ksiazki` VALUES (1, 'Hamlet', 'AAA', 6.5, 2);
INSERT INTO `ksiazki` VALUES (2, 'Makbet', 'AAA', 6.8, 2);
INSERT INTO `ksiazki` VALUES (3, 'Potop', 'BBB', 18.4, 1);
INSERT INTO `ksiazki` VALUES (4, 'Quo vadis', 'BBB', 17.99, 1);
INSERT INTO `ksiazki` VALUES (5, 'Pan Tadeusz', 'CCC', 13.78, 1);
INSERT INTO `ksiazki` VALUES (6, 'Nad Niemnem', 'CCC', 15.45, 1);
 

tworzy relacje jeden do wielu. Do tej pory mi się wydawało, że do utworzenia relacji między tabelami potrzebny jest klucz obcy FOREIGN KEY. W tym przykładzie nie zastosowano tego FOREIGN KEY.

1

po pierwsze mylisz pojęcia - relacja to inaczej TABELA a nie połączenie między nimi! Połączenie między tabelami nazywane jest zależnością między tabelami. Klucz główny to nic innego (w wielkim uproszczeniu) jak indeks unikalny na tabeli i formalnie nic nie stoi na przeszkodzie aby w tabeli zamiast PK był po prostu indeks. Tak samo FK to zwykły indeks na polu plus sprawdzanie czy dana wartość z tabeli jest w innej tabeli. Nigdzie nie jest napisane, że baza mam mieć PK i FK. Serio. Kiedyś widziałem dość duży projekt, gdzie nie było po stronie bazy żadnych PK, FK czy innych sprawdzeń. Wszystko było po stronie aplikacji, normalnie masakra :). Wracając do sedna - FK pilnuje spójności danych ale nie jest wyznacznikiem zależności między tabelami. Z DDLa zależności można wywnioskować analizując strukturę i dane ale nie można w 100% stwierdzić że jest tak a nie inaczej. Do określania min. zależności służy opis bazy w postaci np. diagramu ERD

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