Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klucz obcy z warunkiem
atomic1234
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
askone
post
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
Go to the top of the page
+Quote Post
cojack
post
Post #3





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


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)
Go to the top of the page
+Quote Post
Crozin
post
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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 23:02