Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Problem mit dem Designen der Datenbank

Empfohlene Antworten

Veröffentlicht

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.

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

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 ;)

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 ?

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.

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.