Podczas budowania procedury składowanej, która wstawia do prostej tabeli łącza, powinna sprawdzić, czy istnieją FK i zwracać błąd z wdziękiem lub po prostu pozwolić SQL rzucić wyjątek?Dobra praktyka zachowana w procedurze przechowywania? Czy powinni sprawdzić, czy klucze obce istnieją przed wstawieniem?
- Co to jest najlepsza praktyka?
- Co jest najbardziej wydajne?
Tylko w przypadku, gdy ktoś nie rozumie moje pytanie:
Table A
Table B
Table AB
powinienem zrobić:
IF EXISTS(SELECT 1 FROM A WHERE Id = @A) AND EXISTS(SELECT 1 FROM B WHERE Id = @B)
BEGIN
INSERT AB (AId,BId) VALUES (@A, @B)
END
ELSE
--handle gracefully, return error code or something
lub
INSERT AB (AId,BId) VALUES (@A, @B)
i niech SQL wyjątek
Dzięki
Jeśli martwisz się wydajnością i spodziewasz się wielu naruszeń klucza zagranicznego, zajrzyj na temat [Wpływ różnych technik obsługi błędów na wydajność] (http://sqlperformance.com/2012/08/t-sql-queries/obsługa błędów) i zmierzyć wpływ na swoją bazę danych i sprzęt. –