![]() |
Datenbank: mysql • Version: 5.0.11 • Zugriff über: Query
Foreign Key Problem
Hi , Ich steh voll auf der Leitung grad...
Ich will zwei Tables erstellen, die durch einen Foreign Key miteinander verknuepft sind... Ein Table Person, in der alle Personen gespeichert werden Ein Table Customer, die Personen enthaelt, die etwas gekauft haben. Nun hab ich folgende zwei Tables mit mysql erstellt :
SQL-Code:
Wenn ich nun
CREATE TABLE `x`.`Customer` (
`ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `TotalPrice` DOUBLE NOT NULL DEFAULT 0, PRIMARY KEY(`ID`) ) ENGINE = InnoDB; CREATE TABLE `x`.`Person` ( `ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `CustomerID` INTEGER UNSIGNED NOT NULL DEFAULT 0, `ADName` VARCHAR(45) NOT NULL DEFAULT '', PRIMARY KEY(`ID`), CONSTRAINT `CustomerID` FOREIGN KEY `CustomerID` (`ID`) REFERENCES `customer` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB;
SQL-Code:
eingebe, erhalte ich folgende Meldung:
insert into x.person (ADName) VALUES ('Name1')
Zitat:
|
Re: Foreign Key Problem
Zitat:
|
Re: Foreign Key Problem
Da es aber immer mehr Personen als Kunden gibt, hat das keinen Sinn...
Muss ich vieleicht den FK im Table Customer unterbringen ? |
Re: Foreign Key Problem
Wieso hat das keinen Sinn? Falls ich das richtig sehe, handelt es sich um eine 1:n-Beziehung, d.h. ein Kunde kann mehrere Personen haben, eine Person ist aber genau einem Kunden zugeordnet. Von daher ist das Datenmodell völlig in Ordnung. Was spricht denn dagegen, erst die Kunden zu erfassen?
|
Re: Foreign Key Problem
Hallo,
erzeuge einen Kunden mit Kunden-Id=0, lasse den Record sonst komplett leer. Trage bei neuen Personen, wo du den Kunden noch nicht kennst, die KundenId 0 ein. Das hat zusätzlich noch den Vorteil, dass die einen inner join statt einem left join benutzren kannst, wenn du die Daten der Person incl. des Kunden brauchst. Heiko |
Re: Foreign Key Problem
Hi,
Meine Personentabelle listet alle Personen auf, die ggf. Kunden werden koennen . D.h. Zu jedem Kunden gibt es genau eine Person und zu jeder Person gibt es genau einen Kunden. Die Kundentabelle ist quasi nur eine vererbte Klasse, in der sich noch weitere Details befinden, die sich auf irgendwelche Geschaefte beziehen. Wird nun eine Person geloescht, so auch der Kundendatensatz, da diese Person nicht mehr existiert. Ich hab also jetz folgendes gemacht:
SQL-Code:
Somit werden Kunden geloescht, wenn die jeweilige Person geloescht wird.
CREATE TABLE `x`.`Person` (
`ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, ADName Varchar.... ...., PRIMARY KEY(`ID`) ) ENGINE = InnoDB; CREATE TABLE `x`.`Customer` ( `ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `PersonID` INTEGER UNSIGNED NOT NULL DEFAULT 0, `TotalPrice` DOUBLE NOT NULL DEFAULT 0, FOREIGN KEY (`PersonID`) REFERENCES `Person`(`ID`) ON DELETE CASCADE, PRIMARY KEY(`ID`) ) ENGINE = InnoDB; Hoffe das funzt jetzt so. Danke fuer die Antworten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 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