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
Antwort Antwort
Seite 2 von 3     12 3      
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#11

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

  Alt 30. Jul 2018, 20:30
Du sagst prizipiell in etwas krasserer Form das, was ich weiter oben meinte
Zitat:
verarscht
ist quasi der Klartext für:
Zitat:
Und sowas geht irgendwann schief, Murphy ist da geduldig und schlägt irgendwann gnadenlos zu
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#12

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

  Alt 30. Jul 2018, 21:38
Also wenn ich #1 richtig verstanden habe, gibt es Detail-Datensätze ohne Verbindung zum Haupt-Datensatz, was ja eher suboptimal ist. Da sollte wohl mal massiv aufgeräumt werden.

Gruß
K-H

P.s
Fehler machen wir alle, aber diese zukleistern ist nur wenig schlechter als Garnichts zu tun.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#13

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

  Alt 30. Jul 2018, 22:33
Wenn Du nicht willst, dass der Datensatz gelöscht wird, lege ein Feld an, dass diesen Status (und vielleicht andere Lifecycle Zustände des Datensatz definiert) und nutze einen Trigger, der das überwacht.

Die Referenz auf eine andere Tabelle dafür zu verwenden, ist besonders in Deinem Fall nicht möglich, außer Du legst eben den Datensatz mit Key 0 in der Fremdtabelle an.

Funktionsbasierte Indices würde ich für den Zweck auch nicht einsetzen- selbst wenn es ginge, was ich bezweifele- weil ein Index nichts mit dem Modell zu tun haben sollte.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
679 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
Emwykey

Registriert seit: 27. Aug 2013
51 Beiträge
 
#15

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

  Alt 31. Jul 2018, 13:04
Danke erstmal für eure Antworten.

Generell ist es schon machbar die 0 Werte in NULL Werte zu ändern, der Aufwand wäre nur zeitlich sehr groß da es doch ziemlich viele Felder betrifft, weswegen ich wissen wollte ob ich noch andere (weniger aufwändige) Möglichkeiten habe. Diese Frage scheint damit beantwortet zu sein
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#16

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

  Alt 31. Jul 2018, 13:25
Dennoch könnte man sich jetzt überlegen das zu ändern,
denn wer weiß wieviele hundert Felder die nächsten Jahre noch dazu kommen,
und dann wird es immer schwerer zu ändern.
$2B or not $2B
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#17

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

  Alt 31. Jul 2018, 14:49
..zu ändern, der Aufwand wäre nur zeitlich sehr groß da es doch ziemlich viele Felder betrifft
Mmh, "großer Aufwand " klingt jetzt irgendwie nach einer Crowd Sourcing Aktion bei der 20 unterbezahlte "Eingabekräfte" Formulare durchackern und statt Nichs "0" eintippen.

Man kann mit SQL sowohl horizontal als auch vertikal ganz viele Felder "auf einen Schlag" aktualisieren.
Bei einem verteilten System müsste das durch eine Aktualisierung, einen Remote Support o.ä. erfolgen.

Ansonsten sehe ich es wie himitsu und würde nicht unbedingt die technischen Möglichkeiten in der Richtung ausreizen und eine bereits unkonventionelle Umsetzung noch weiter verändern.
Gruß, Jo
  Mit Zitat antworten Zitat
Emwykey

Registriert seit: 27. Aug 2013
51 Beiträge
 
#18

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

  Alt 31. Jul 2018, 15:56

Man kann mit SQL sowohl horizontal als auch vertikal ganz viele Felder "auf einen Schlag" aktualisieren.
Bei einem verteilten System müsste das durch eine Aktualisierung, einen Remote Support o.ä. erfolgen.

Ansonsten sehe ich es wie himitsu und würde nicht unbedingt die technischen Möglichkeiten in der Richtung ausreizen und eine bereits unkonventionelle Umsetzung noch weiter verändern.
Den Inhalt der Felder und deren Definition zu ändern ist weniger das Thema, eher die ganzen Routinen die darauf zugreifen und 0 eben als LEER interpretieren, NULL aber garnicht prüfen, da die Felder alle als not NULL definiert sind ...

Aber scheint als ob ich da wohl nicht drum rum komme...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#19

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

  Alt 31. Jul 2018, 16:15
Einfach SP oder VIEW, der das gewünschte Format liefert.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#20

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

  Alt 31. Jul 2018, 16:43
Einfach SP oder VIEW, der das gewünschte Format liefert.
Da das Programm auch schreiben will, wäre das dann ein "Updatable VIEW".
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 03:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz