[Firebird] Jak używać FOREIGN KEY

0

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?

0

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.

0

Wielkie dzięki. Popisałem sobie różen zapytania z FOREIGN KEY i wszystko działa :)

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