Kupiłem strasznie słabą książkę o SQL, której jedynym plusem jest chyba to, że dobrze opisuje instalację i konfigurację baz. W opisie podstaw SQL-a są luki, brak przykładów itd.
Zastanawiam się jak używać FOREIGN KEY. W internecie bardzo mało piszą na temat Firebirda :( Z tego co wyczytałem gwarantuje on, że w innej tabeli istnieje taki sam PRIMARY KEY. Jak stworzyć tabelę z kolumną będacą FOREIGN KEY?
Klucze obce w bazie gwarantują Ci integralność referencyjną danych. Znaczy to tyle, że baza nie pozwoli na usunięcie rekordu jeżeli istnieje dla niego rekord nadrzędny, czyli: dwie tabele Pracownik i Wydział. Pracownik zawiera listę nazwisk i przypisane Wydziały. Nie usuniesz wiersza z wydziału do czasu aż nie usuniesz wszystkich pracowników z owego wydziału. Co do kodu SQL. Wkleję Ci fragment mojego:
Tabela Departament (wydział) wraz z generatorem dla klucza głównego i wyzwalaczem w momencie dodawania rekordu.
CREATE TABLE Departament(
IDDepartament INTEGER NOT NULL, /* klucz podstawowy */
Departament VARCHAR(30), /* Nazwa */
UserName VARCHAR(20),
PRIMARY KEY (IDDepartament)
);
/****************************************************************************/
CREATE GENERATOR G_Departament;
SET GENERATOR G_Departament TO -1;
/****************************************************************************/
SET TERM #;
CREATE TRIGGER T_Departament FOR Departament
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.IDDepartament = GEN_ID(G_Departament, 1);
END
#
SET TERM ;#
Tabela Employee (pracownik).
CREATE TABLE Employee(
IDEmployee INTEGER NOT NULL, /* Numer personalny pracownika */
DepartamentID INTEGER NOT NULL, /* Obszar pracy */
FirstName VARCHAR(20), /* Imię */
LastName VARCHAR(30), /* Nazwisko */
Crew CHAR(1), /* Brygada */
IsEmpl SMALLINT, /* Status zatrudnienia */
UserName VARCHAR(20),
PRIMARY KEY (IDEmployee),
FOREIGN KEY (DepartamentID) REFERENCES Departament(IDDepartament)
);
Przykładowe inserty
INSERT INTO Departament VALUES (NULL, 'Administracja', 'aoleksy');
INSERT INTO Employee VALUES (7, 0, 'Oleksy', 'Adam', 'D', 1, 'aoleksy');
Więcej - odsyłam do strony domowej projektu Firebird. jest tam do zassania Language reference w formacie pdf.
Wielkie dzięki. Popisałem sobie różen zapytania z FOREIGN KEY i wszystko działa :)