![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 2.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 654 Pomógł: 121 Dołączył: 27.10.2007 Skąd: Poznań, Łódź Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
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 (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 23:02 |