AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird Feld mit foreign key "0" anstelle von NULL
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird Feld mit foreign key "0" anstelle von NULL

Ein Thema von Emwykey · begonnen am 30. Jul 2018 · letzter Beitrag vom 1. Aug 2018
 
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
688 Beiträge
 
FreePascal / Lazarus
 
#14

AW: Firebird Feld mit foreign key "0" anstelle von NULL

  Alt 31. Jul 2018, 10:53
Ein Foreign Key ist technisch nichts anderes als ein Systemtrigger und ein Systemindex.
Es spricht nichts dagegen, den Trigger so umzusetzen, das der deiner Logik entspricht
und zum Beispiel mit einer Exception das Löschen verhindert

Code:
CREATE OR ALTER TRIGGER CUSTOMER_BD0 FOR CUSTOMER
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  if (exists (select orders.customer_id from orders where coalesce(orders.customer_id,0)=old.id)) then
  exception err 'Customer kann nicht gelöscht werden, wenn noch noch Orders existieren';
end
das ist kein konkreter Vorschlag für deine Problematik, das so mit coalesce zu lösen, sondern
einfach nur ein Hinweis, das fehlende Logik in Foreign keys problemlos selbst gebaut werden kann.

Wenn hier im Beispiel kein Index auf orders.customer_id existieren würde, bricht die Performance
ein und jeder delete auf customer würde ein Full table scan auf orders auslösen. Daher sollte man
drauf achten, das da ein Index existiert. Die Deklaration eines Foreign Keys legt Trigger und
Index automatisch an, wenn es also dir so nicht passt, wie es deklarativ geht, do it yourself.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz