Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Views über 2 Tabellen mit Beziehung (https://www.delphipraxis.net/85556-views-ueber-2-tabellen-mit-beziehung.html)

PeteSky 1. Feb 2007 13:36

Datenbank: MSSQL • Version: 2000 • Zugriff über: ADO

Views über 2 Tabellen mit Beziehung
 
Hallo,
Habe ein Problem mit einer View beim Löschen von Daten.
Hier die View:
SQL-Code:
CREATE VIEW dbo.tblStoerung
AS
SELECT     dbo.Kunde.Geldgeber, dbo.Stoerung.*
FROM       dbo.Kunde
INNER JOIN dbo.Stoerung
        ON dbo.Kunde.Betrieb = dbo.Stoerung.eBetrieb
Ausserdem besteht eine Beziehung zwischen Stoerung.eBetrieb und Kunde.Betrieb.
SQL-Code:
ALTER TABLE [dbo].[Stoerung]
ADD CONSTRAINT [FK_Stoerung_Kunde] FOREIGN KEY ([eBetrieb])
  REFERENCES [dbo].[Kunde] ([Betrieb])
  ON UPDATE NO ACTION
  ON DELETE NO ACTION
Beim Löschen von Daten bekomme ich folgende Fehlermeldung:
Code:
 Die DELETE-Anweisung verstieß gegen die COLUMN REFERENCE-Einschränkung 'FK_Stoerung_Kunde'. Der Konflikt trat in der dataSQL-Datenbank, Tabelle 'Stoerung', column 'eBetrieb' auf.
Was mache ich hier falsch? :?

marabu 1. Feb 2007 13:50

Re: Views über 2 Tabellen mit Beziehung
 
Hallo,

du hast eine 1:n Beziehung zwischen Kunden und Störungen definiert, einen Fremdschlüssel eingerichtet und für die Deklarative Referentielle Integrität (DRI: ON DELETE NOACTION) angegeben, dass beim Löschen des referenzierten Master-Keys nichts unternommen werden soll. Wenn in deinem Datenmodell Störungen nur in Verbindung mit einem Kunden existieren dürfen, dann willst du ON DELETE CASCADE festlegen. Andernfalls brauchst du keine Fremdschlüsselbeziehung und musst, da MS SQL nicht alle DRI Business Rules (CASCADE, NOACTION, NULLIFY, REJECT, ...) unterstützt, einen entsprechenden Trigger definieren.

Grüße vom marabu

PeteSky 1. Feb 2007 14:33

Re: Views über 2 Tabellen mit Beziehung
 
Danke für die schnelle Antwort. :thumb:
Habe jetzt geändert:
SQL-Code:
ALTER TABLE [dbo].[Stoerung]
ADD CONSTRAINT [FK_Stoerung_Kunde] FOREIGN KEY ([eBetrieb])
  REFERENCES [dbo].[Kunde] ([Betrieb])
  ON UPDATE NO ACTION
  ON DELETE CASCADE
Nur werden mir jetzt auch die Einträge in der Tabelle Kunde gelöscht und alle Einträge sie sich auf diesen Kunden beziehen eben auch in der Tabelle Stoerung :?
Es sollen ja nur der eine Datensatz in der Tabelle Stoerungen gelöscht werden.

Lösche ich die ganze Beziehung, dann werden mir trotzdem die Einträge aus der Tabelle Kunden entfernt.

Hier noch mal die Datenbank:

Jeder Kunde existiert nur einmal in der Tabelle Kunde.
In der Tabelle Stoerung werden über ein Lookup-Feld die Kunden im Feld eBetrieb ausgewählt. Es können also nur Kunden ausgewählt werden , die in der Tabelle Kunden existieren. Änderungen bei den Kunden werden an die Tabelle Störung weitergegeben. Wird ein Eintrag in der Tabelle Stoerung entfernt, so sollen die Kunden-Tabelle unberührt bleiben.

Ohne Views hatte ich keine Probleme.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 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-2025 by Thomas Breitkreuz