Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzanie obecności rekordów w innych tabelach
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
jiuji
Witam

Mój pierwszy post, mam nadzieje pomagać w przyszłości innym użytkownikom. Ale do rzeczy. Mam takie o to tabele:

CREATE TABLE "Administrator" (
id_wpisu bigint NOT NULL, --identyfikator wpisu
id_poz bigint NOT NULL, --Klucz obcy. Identyfikator poziomu dostepu
wersja bigint NOT NULL --Numer wersji
);

CREATE TABLE "Poziomy_dostepu" (
id bigint NOT NULL, --identyfikator poziomu
nazwa character varying(20) NOT NULL, --Nazwa poziomu
konto_id bigint NOT NULL, --Klucz obcy. Identyfikator konta
czy_aktywne boolean DEFAULT false NOT NULL, --Status aktywnosci poziomu dla danego konta, domyślnie nieaktywne
wersja bigint NOT NULL --numer wersji
);


CREATE TABLE "Zatwierdzajacy" (
id_wpisu bigint NOT NULL, --identyfikator wpisu
id_poz bigint NOT NULL, --Klucz obcy. Identyfikator poziomu dostepu
wersja bigint NOT NULL --Numer wersji
);


CREATE TABLE "Zlecajacy" (
id_wpisu bigint NOT NULL, --identyfikator wpisu
id_poz bigint NOT NULL, --Klucz obcy. Identyfikator poziomu dostepu
wersja bigint NOT NULL --Numer wersji
);

Poziom id jest powiązany z kontem i chciałbym zrobić takie ograniczenie, że jeden poziom_id nie może być jednocześnie w dwóch tabelach.
Chodzi o to, że mamy np. id_poz 1,2,3,4 itd. i nie może być sytuacji, kiedy w tabeli np. zlecajacy i zatwierdzajacy jest wpis zawierajacy ten sam
id_poz. Niestety najwieksza bolączka, nie mogę posłużyć się triggerami (takie wymagania). Czy ktoś mógłby mnie naprowadzić?

Pozdrawiam
alegorn
proponuje normalizacje.

masz 3 tabele ktore maja dokladnie te same pola, sluza do przechowywania tego samego róznica polega tylko na roli

zrób tablele "Poziomy_dostepu" oraz

  1. CREATE TABLE "akcje" (
  2. id_wpisu bigint NOT NULL, --identyfikator wpisu
  3. id_poz bigint NOT NULL, --Klucz obcy. Identyfikator poziomu dostepu
  4. id_roli NOT NULL,
  5. wersja bigint NOT NULL --Numer wersji
  6. );
  7.  
  8. -- oraz
  9.  
  10. CREATE TABLE "role" (
  11. id_roli int NOT NULL, --identyfikator wpisu
  12. rola char(10)
  13. );


dodaj klucz na id_poz oraz id_roli, to załatwi sprawe unikalności.


j.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.