Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Relation zwischen Tabellen -> FOREIGN KEY-Einschränkung?? (https://www.delphipraxis.net/103318-relation-zwischen-tabellen-foreign-key-einschraenkung.html)

Salomon 14. Nov 2007 10:22

Datenbank: MS SQL Server Express • Version: 2005 • Zugriff über: ADO

Relation zwischen Tabellen -> FOREIGN KEY-Einschränkung??
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich erstelle gerade einige Beziehungen zwischen Tabellen mittles des MS SQl Server Management Studio Express.

Bei der in der Grafik rot makierten Beziehung erhalte ich den folgenden Fehler:

TB_AM_Hours-Tabelle
- Beziehung "FK_TB_AM_Hours_TB_AM_Projects" kann nicht erstellt werden.
Die ALTER TABLE-Anweisung steht in Konflikt mit der FOREIGN KEY-Einschränkung "FK_TB_AM_Hours_TB_AM_Projects". Der Konflikt trat in der "DB_ProjectPoint"-Datenbank, Tabelle "dbo.TB_AM_Projects", column 'ProjectsID' auf.

Bei der TB_AM_Programs hat dies einwandfrei funktioniert. Ich sehe hier bei der Projects Tabelle keinen Unterschied zur Programstabelle. ProjectsID ist der Primary key, ein autoinc int wert. Dieser soll mit FK_ProjectsID in der TB_AM_Hours verknüpft werden.

Der Designer möchte für die Änderung folgendes SQL Statement ausführen:

SQL-Code:
/* Überprüfen Sie das Skript ausführlich, bevor Sie es außerhalb des Datenbank-Designer-Kontexts ausführen, um potenzielle Datenverluste zu vermeiden.*/
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.TB_AM_Hours ADD CONSTRAINT
   FK_TB_AM_Hours_TB_AM_Projects FOREIGN KEY
   (
   FK_ProjectID
   ) REFERENCES dbo.TB_AM_Projects
   (
   ProjectsID
   ) ON UPDATE NO ACTION
    ON DELETE NO ACTION
   
GO
COMMIT
Warum funktioniert das nicht? Irgendwelche "FOREIGN KEY-Einschränkung" sind mir nicht bekannt.

Thanx
Marcus

shmia 14. Nov 2007 12:20

Re: Relation zwischen Tabellen -> FOREIGN KEY-Einschränku
 
Dein Problem lässt sich so aus der Ferne schwer beurteilen.
Aber für mich sieht es so aus, als ob die Beziehung schon vorhanden ist und du diese ein 2. Mal anlegen möchtest.
Ich würde auf jeden Fall das Server Management Studio verlassen, neu starten und ein Diagramm anlegen (falls noch nicht vorhanden). Im Diagramm sieht man die Beziehungen am Besten.

Salomon 14. Nov 2007 13:41

Re: Relation zwischen Tabellen -> FOREIGN KEY-Einschränku
 
Die Beziehung ist noch nicht vorhanden. Ich probiere diese ja in der "Diagramm Ansicht" zu erstellen.

Die Tabellen sind schon mit Daten befüllt. Könnte es daran liegen?

shmia 14. Nov 2007 18:44

Re: Relation zwischen Tabellen -> FOREIGN KEY-Einschränku
 
Zitat:

Zitat von Salomon
Die Tabellen sind schon mit Daten befüllt. Könnte es daran liegen?

Ja, natürlich. Wenn Fremdschlüssel verwendet werden, die keine Entsprechung in der Mastertablle haben, kann die Beziehung nicht angelegt werden.

Salomon 15. Nov 2007 10:42

Re: Relation zwischen Tabellen -> FOREIGN KEY-Einschränku
 
Du hast recht, ich schreibe als Foreign Key teilweise eine 0 weg, die keine Entsprechung in der Mastertabelle hat. Nach dem löschen dieser Datensätze kann ich die Relation anlegen :)

Allerdings muss ich jetzt mein Softwaredesign überarbeiten. Da werde ich wohl NULL in die Primärschlüsseltabelle schreiben müssen, wenn es keine Entsprechung in der Fremtschlüsseltabelle gibt.

hoika 15. Nov 2007 11:49

Re: Relation zwischen Tabellen -> FOREIGN KEY-Einschränku
 
Hallo,

schreibe nicht NULL, sondern eine Record mit 0 als PrimKey in die Master-Tabelle.
Dann kannst du immer inner joins statt left joins benutzen,
um an die Daten zu gelangen.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 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