niedziela, 4 sierpnia 2013

Klucz główny oraz klucze obce - MSSQL 2008 Server cz.5

 1) Poniżej kod SQL dodający dla dwóch tabel klucz główny w utworzonej w poprzednim wpisie bazie testowej:

Jednymi z nieodłącznych elementów każdej tabeli w bazie danych są klucze obce oraz klucz główny. Ten ostatni definiuje jednoznacznie w unikalny sposób wiersze w tabeli. Przy tworzeniu klucza dodatkowo ustalany jest sposób sortowania, domyślnie klucz główny jest również kluczem klastrowym co oznacza, że dane sortowane są własnie według niego. Klucze obce natomiast wiążą min. dwie tabele bazy w taki sposób aby w strukturze takiego połączenia nie było wierszy które nie mają powiązania z drugą tabelę, tzw. rodzicem. Dodatkowo jeżeli chcemy utworzyć klucz obcy między dwiema tabelami, musimy na tabeli - rodzicu ustalić klucz główny.



ALTER TABLE test.Customer
    ADD CONSTRAINT pk_customer PRIMARY KEY CLUSTERED (CustomerID)
GO

ALTER TABLE test.OrderHeader
    ADD CONSTRAINT pk_orderheader PRIMARY KEY CLUSTERED (OrderID)
GO

2) Dodamy również klucz obcy dla w/w tabel:

ALTER TABLE test.OrderHeader
   ADD CONSTRAINT fk_orderheadercustomer FOREIGN KEY (CustomerID)
       REFERENCES test.Customer (CustomerID)
GO


3) Wymyślmy wstawienie obecnej daty przy zmianach w/w tabel do kolumny CreationDate oraz OrderDate:

Aby zwiększyć nadzór nad naszymi tabelami i nie dopuścić, aby walały się w nich śmieci, można przy pomocy ograniczeń domyślnych zmusić system, aby w przypadku nie podania przez użytkownika danych przy wstawianiu informacji do tabeli zawsze w odpowiedni kolumnę system sam wstawił zdefiniowaną wcześniej informację, takie postępowanie nazywa się ograniczeniem domyślnym.

ALTER TABEL test.Customer
    ADD CONSTRAINT df_creationdate DEFAULT (GETDATE()) FOR CreationDate
GO

ALTER TABEL test.Customer
    ADD CONSTRAINT df_orderdate DEFAULT (GETDATE()) FOR OrderDate
GO


4) Ograniczenia sprawdzające:

Jesteśmy w stanie wymusić dla konkretnej kolumny w tabeli, aby dane w niej zwarte miały taki a nie inny "wygląd". Możemy dla tabeli OrderHeader sprawdzić czy kolumna CustomerID (przechowująca numer klienta) ma wygląd zgodny z naszymi założeniami:

- na początki znajduje się kod kraju PL,
-myślnika
-następnie pozostała część numeru

CHECK (CustomerID LIKE ' [A-Z] [A-Z]-[0-9] [0-9] [0-9] [0-9] [0-9] [0-9] ' ) 

ALTER TABLE test.CustomerID
   ADD CONSTRAINT ck_customerid CHECK (CustomerID LIKE ' [A-Z] [A-Z]-[0-9][0-9][0-9][0-9][0-9][0-9] ' ) 
GO

Od tej pory w tę kolumnę wymuszane będzie wstawiane danych w formacie: PL.111111.

Brak komentarzy:

Prześlij komentarz