Maiki1983VF Geschrieben 16. Oktober 2006 Teilen Geschrieben 16. Oktober 2006 Hallo zusammen, Ich soll auf Daten aus zwei verschiedenen Tabellen referenzieren. Eine dieser beiden Tabellen ist statisch (also darf nicht editiert werden), die andere Tabelle enthält selbst erstellte Daten und darf editiert werden. Die statische Tabelle hat eine 11-stellige Zeichenfolge als PrimaryKey, die editierbare hat einen Number-Wert ( in MySQL INT(9) ). Jetzt stellt sich für mich die Frage, wie ich bereits in der Datenbank die referenzielle Integrität sicherstellen kann, dass auch der richtige Datensatz ausgelesen wird. Ich hoffe, jmd. kann mir einen Denkanstoß geben. Tabelle 1: ------------- FK Person: INT(11) Person_1: [statisch] ------------ PK Id : VARCHAR(11) Name : VARCHAR(50) Person_2: [editierbar] ------------ PK Id: INT(11) Name: VARCHAR(50) Hintergrundinformationen: Ich bekomme einen festen Datenbestand mit Daten (in diesem Fall Banken: ca. 85.000 Einträge) vorgegeben. Diese sind mit einem 11-stelligen Buchstaben-Code (--> VARCHAR) als PrimaryKey versehen. Diese Daten sollen für den späteren Anwender zwar zu sehen, aber nicht editierbar sein. Es sollen auch keine weiteren Einträge in diese Tabelle gemacht werden können, weil es sich hier um offiziell herausgegebene Daten handelt. Die späteren Anwender haben aber angefordert, bei Bedarf weitere Einträge zu dieser Liste hinzuzufügen, da nicht alle Geschäftspartner in der offiziellen Liste mit der eigenen Firmierung ( evtl. durch eine andere Bank vertreten ) auftauchen. Somit habe ich zwei Tabellen ( eine editierbare und eine feste ). Aber in einer anderen Tabelle will ich auf einen Eintrag aus der einen oder anderen Tabelle referenzieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
johnhaltonx Geschrieben 16. Oktober 2006 Teilen Geschrieben 16. Oktober 2006 Ich schätze das du mysql verwendest? -- statische Tabelle CREATE TABLE P1 ( PKID VARCHAR(11) NOT NULL AUTO_INCREMENT, name VARCHAR(50) NULL, PRIMARY KEY(PKID) ); -- editierbare Tabelle CREATE TABLE P2 ( PKID2 INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(50) NULL, PKID VARCHAR(11) NULL, PRIMARY KEY(PKID2) ); Die Integrität würde ich über einen Trigger auf P2 sicherstellen, "ON INSERT OR UPDATE" die PKID in P2 optional setzen ( falls es sich um eine Referenz handelt, falls es ein Komplett neuer Eintrag ist eben nicht setzen) Alternativlösung: du erlaubst insert in diese Tabelle grenzt aber die neuen Einträge über ein extra FLAG ab CREATE TABLE P1 ( PKID VARCHAR(11) NOT NULL AUTO_INCREMENT, name VARCHAR(50) NULL, typ ENUM ('S','V') NULL, -- S - Statisch, V - Variabel PRIMARY KEY(PKID) ); Und erlaubst/verbietest den Edit Zugriff basierend auf dem FLAG. Das auseineandersortieren der "offiziellen" Einträge geht ja dann auch FALG-basiert mit einem einfachen SELECT. Mir gefällt die Variante 2 besser, falls sihc das it deinen Anforderungen vereinbaren läßt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Maiki1983VF Geschrieben 16. Oktober 2006 Autor Teilen Geschrieben 16. Oktober 2006 Leider lässt sich die zweite Variante nicht mit meinen Anforderungen vereinbaren. Die Idee mit dem Trigger ist mir auch schon gekommen, wollte aber mal hören, obs evtl. noch andere Ideen gibt! Danke schonmal für deine Idee Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
baba007 Geschrieben 16. Oktober 2006 Teilen Geschrieben 16. Oktober 2006 nach 3 mal durchlesen verstehe ich immer noch nicht das problem. 2 tabellen, 2 PKs pk aus der statischen ist FK in der anderen tabelle, wo ist da ein problem ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
johnhaltonx Geschrieben 16. Oktober 2006 Teilen Geschrieben 16. Oktober 2006 Es gibt neue einträge in der variablen Tabelle die nicht mit den Einträgen der statischen Tabelle gelinkt sind, ein Fk ist ja logischerweise NOT NULL, also kann man diese "Optionale" Verknüpfung damit nicht darstellen, weil nur ein Teil der Records in der variablen Tabelle mit denen aus der Statischen über den Fk verbunden ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 17. Oktober 2006 Teilen Geschrieben 17. Oktober 2006 Also entweder is hab das jetzt falsch verstanden... SELECT * FROM PERSON_1 LEFT JOIN PERSON_2 ON CAST(PERSON_1.`PK Id` as UNSIGNED) = PERSON_2.`PK Id` Mit dem Umwandeln String in Int bin ich mir nich sicher... muss da jedesmal wieder nachsehen Und hab das jetzt auch nicht testen können. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.