Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klucz obcy z warunkiem
Forum PHP.pl > Forum > Bazy danych > MySQL
atomic1234
Witam,
jak skonstruować dobrze bazę danych, która sama dbałaby o integralność danych w takim problemie:

1 tabela - pracownicy
szereg danych teleadresowych + identyfikator działu

2 tabela - produkty
szereg informacji o produkcie + identyfikator pracownika, który wystawiał fakturę

Teraz mam to rozwiązane w ten sposób, że w drugiej tabeli istnieje klucz obcy do tabeli pierwszej - oczywiste, lecz chciałbym zabezpieczyć, że identyfikator pracownika, który wystawiał fakturę nie może być identyfikatorem dowolnego pracownika, lecz pracownika, którego identyfikator działu będzie wynosił np. 3 (księgowość).

Da się to zrobić z poziomu projektu bazy danych?

Kuba
askone
Wydaje mi się, iż mógłbyś coś takiego osiągnąć poprzez napisanie triggera BEFORE_INSERT, w którym będziesz sprawdzał wartość identyfikatora działu. Uważam jednak, że nie jest to najlepsze rozwiązanie - osobiście logikę zaprogramowałbym po stronie aplikacji...

Pozdrawiam
cojack
Oczywiście że się da, musisz użyć constrainów na kolumny w bazie, o ile masz identyfikator działu pracownika w tej tabeli która posiada foreign key, inaczej się nie da, sql engine nie jest w stanie wykonać tak skomplikowanej operacji. askone dobrze mówi że można to wykonać na podstawie triggera, ale ni o to chodzi. Także rozumiem Twój problem bo sam się kiedyś z nim spotkałem, z tym że ja wszystko wykonywałem z poziomu procedur sql i miałem trochę łatwiej wink.gif
Crozin
Od czegoś takiego jest klauzura CHECK w CREATE TABLE ale:
Cytat
The CHECK clause is parsed but ignored by all storage engines.
Tak, więc chyba nie pozostaje Ci nic innego jak TRIGGER, który wyrzuci błąd, albo zmiana bazy danych.
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-2025 Invision Power Services, Inc.