atomic1234
24.02.2011, 08:16:33
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
24.02.2011, 09:49:53
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
24.02.2011, 11:07:31
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
Crozin
24.02.2011, 13:18:36
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.