Zum Inhalt springen

Grundlegende Frage die ich nicht verstehe ... :)


uglygeorge08

Empfohlene Beiträge

Hallo zusammen,

Der nervige Junge mit den lästigen Fragen ist wieder zurück .. :)

Folgendes ist mir beim betrachten meines ERD"s aufgefallen:

Man nehme z.B:

Tabelle - Personalien

IDPersonalien

Geschlecht

Name

Vorname

Alter

IDAdresse

Tabelle - Adresse

IDAdresse

Strasse

Hausnummer

PLZ

Ort

In der Tabelle Personalien haben wir den Fremdschlüssel von der Tabelle "Adresse". Da wie wir alle wissen, die Adresse ein Bestandteil der Personalien ist.

Meine Frage an euch:

- Wie soll/kann ein User via PHP seine kompletten Personalien erfassen können?

Will er die Personalien erfassen, so scheitert es bei der Adresse, da diese noch nicht in dem Table "Adresse" erfasst wurde? :P

Die einzige logische Variante wäre, das man zuerst die Adresse erfasst bzw. zuerst in die DB schreibt und anschliessend den Rest der Personalien?

Ist das nicht ein bisschen umständlich oder gibt es da einen anderen Weg? Mir ist das per Zufall beim rumspielen mit meiner DB in den Sinn gekommen, obwohl ich noch keine Zeile PhP geschrieben habe.

Zusatzfrage (optional :floet: )

2. Kann mir jemand den Unteschied zwischen "nicht identifizierbaren" und "idenzifizierbaren" Relationen erklären? Habe nun sicher schon 3 Erklärungen erhalten, aber keine hat wirklich eingeleuchtet .. ^^

Am meisten Sinn würde es machen, wenn z.B ein User gelöscht wird, dass alle Datenzeilen derTabellen welche mit einer idenzifizierten Relation angesprochen werden, ebenfalls gelöscht werden. Natürlich nur die vom betreffenden User?

Ich hoffe ich gehe euch hier nicht zu fest auf die nerven ... :(

gruss & nice weekend

ugly

Bearbeitet von uglygeorge08
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

zu 1.) ja, da hast du Recht, dass musst du auf diesem Weg so machen und in dieser Reihenfolge.

Gruß

Oh okey, das hört sich umständlich an .... :)

Vielleicht sollet ich doch die eine oder andere 1:1 Verbindung einbauen. Beim User hatte ich das Problem, bevor er sich registrieren kann, muss er seine Personalien bis aufs detailierteste erfassen.

Zwischen dem Tabel User und Personalien habe ich nun neu eine 1:1 Relation. Da kann er nun die Personalien auch später erfassen .. :)

Danke für deine Antwort. Ich lasse den Thread mal für weitere Antworten, weiter bumpen .. :)

Gruss

ugly

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da wie wir alle wissen, die Adresse ein Bestandteil der Personalien ist.

Ist das so? Wäre mir zumindest neu. Selbst die Polizei nimmt ab und an die Personalien von Obdachlosen auf...

Und: FK-Spalten können auch problemlos NULL enthalten. Der FK sagt ja nur aus "wenn hier etwas steht, dann verweist dieser Key auf diese oder jene Tabelle".

Grüsse,

Lizzy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist dann falsch, wenn die referentielle Integrität eingeschaltet ist.

Bitte was? Zeig mir mal den Schalter in einer MSSQL oder wegen mir auch anderen Datenbank. Referenzielle Integrität bedeutet nur, dass vorhandene Referenzen auch stimmig sind. I.e. wenn ein Eintrag Personalien auf per IdAdresse auf einen Datensatz in der Adresstabelle hinweist, dann muss dieser auch vorhanden sein. Wenn da aber NULL drinsteht ist das auch vollkommen in Ordnung und berührt die referenzielle Integrität nicht

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was ich mich eh Frage ist, warum du diese Daten in zwei getrennten Tabellen erfasst... auch könntest du in der Adress-Tabelle die Personal-ID als Fremdkey nehmen und ggf. noch einen weiteren Index, falls ein Mitarbeiter mehrere Adressen haben können soll.

Hm ... meinst du? Die Adresse ist ja normalerweise ein Bestandteil der Personalien und nocht umgekehrt?^^

Ich habe das so durchgesagt:

Mehrere Personalien können eine Adresse haben. Eine Adresse kann zu mehreren Personalien gehören? :(

Jetzt versteh ich nur noch Bahnhof .. ^^

@ Lizzy:

In welchen Fällen würde es z.B Sinn ergeben, ein Fremdschlüssel nicht auf "NOT NULL" zu setzten?

Danke euch beiden & Gruss

Ugly

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mehrere Personalien können eine Adresse haben. Eine Adresse kann zu mehreren Personalien gehören?

Beide Varianten können ja nach fachlichem Hintergrund ihren Sinn haben.

Hat man z.B. mehrere Firmen in einem Bürogebäude unter der gleichen Adresse dann sind diese im Fall eines Umzugs unabhängig voneinander; eine Familie wird aber häufig zusammen die Adresse wechseln.

Außerdem würde ich überlegen, nicht die Personalie auf die Adresse referenzieren zu lassen sondern umgekehrt, denn man kann durchaus mehrere Adressen haben, z.B. den Zweitwohnsitz am Studienort.

Gruß Martin

Link zu diesem Kommentar
Auf anderen Seiten teilen

Außerdem würde ich überlegen, nicht die Personalie auf die Adresse referenzieren zu lassen sondern umgekehrt, denn man kann durchaus mehrere Adressen haben, z.B. den Zweitwohnsitz am Studienort.

Oh mein Gott! Manchmal hoffe ich echt, das liest hier niemand. An alle dort draussen: Don't try this at home!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Man nehme z.B:

Tabelle - Personalien

IDPersonalien

Geschlecht

Name

Vorname

Alter

IDAdresse

Tabelle - Adresse

IDAdresse

Strasse

Hausnummer

PLZ

Ort

Da fallen mir direkt ein paar Sachen ins Auge:

1. Du solltest Dich bei der Tabellenbenennung für den Singular oder den Plural entscheiden, nicht mischen. Ich persönlich bevorzuge den Singular. Also z.B. statt dem Begriff Personalien das was auch drinnen steht also Person. Das aber nur als Vorschlag um die Lesbarkeit zu erhöhen.

2. Das momentane Alter unterliegt doch recht großen Schwankungen. Daher niemals das Alter, sondern immer das Geburtsdatum hinterlegen.

3. Die Tabelle PERSONALIEN ist die übergeordnete Tabelle. Also raus mit dem Feld IDAdresse. Die Beziehungsbeschreibung würde dann lauten: Eine Person hat eine, keine oder mehrere Adressen, eine Adresse ist genau einer Person zugeordnet. In die Tabelle ADRESSE kommt dann das Feld IDPERSONALIEN als Fremdschlüssel rein

Damit ist auch Dein Problem erledigt. Du trägst zuerst per PHP die Personendaten ein, dann die Adressdaten und anschließend COMMIT.

In der Tabelle Personalien haben wir den Fremdschlüssel von der Tabelle "Adresse". Da wie wir alle wissen, die Adresse ein Bestandteil der Personalien ist.

Ein FK bildet die Beziehung aber von unten nach oben ab, nicht von oben nach unten. D.h. die übergeordnete Tabelle kennt die untergeordnete erstmal nicht, die untergeordnete weiß aber über den Fremdschlüssel welche Tabelle ihr übergeordnet ist. Da hast Du einen ganz großen Denkfehler drinnen, der dann zu Deinem Problem führt.

Du hast jetzt eine 1:1 Beziehung. D.h. eine Person hat genau eine Adresse. Sofern das richtig wäre könnte man sich die zweite tabelle auch direkt sparen und alles in einer tabelle zusammenbauen (machen wir aber natürlich nicht, denn wir wollen für eine Person ja auch mehrere Adressen angeben können).

Oh mein Gott! Manchmal hoffe ich echt, das liest hier niemand. An alle dort draussen: Don't try this at home!
Augenscheinlich haben diesen Denkfehler aber wohl mehrere ;) Also ruhig nachmachen.

Dim

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da fallen mir direkt ein paar Sachen ins Auge:

1. Du solltest Dich bei der Tabellenbenennung für den Singular oder den Plural entscheiden, nicht mischen. Ich persönlich bevorzuge den Singular. Also z.B. statt dem Begriff Personalien das was auch drinnen steht also Person. Das aber nur als Vorschlag um die Lesbarkeit zu erhöhen.

2. Das momentane Alter unterliegt doch recht großen Schwankungen. Daher niemals das Alter, sondern immer das Geburtsdatum hinterlegen.

3. Die Tabelle PERSONALIEN ist die übergeordnete Tabelle. Also raus mit dem Feld IDAdresse. Die Beziehungsbeschreibung würde dann lauten: Eine Person hat eine, keine oder mehrere Adressen, eine Adresse ist genau einer Person zugeordnet. In die Tabelle ADRESSE kommt dann das Feld IDPERSONALIEN als Fremdschlüssel rein

Damit ist auch Dein Problem erledigt. Du trägst zuerst per PHP die Personendaten ein, dann die Adressdaten und anschließend COMMIT.

Ein FK bildet die Beziehung aber von unten nach oben ab, nicht von oben nach unten. D.h. die übergeordnete Tabelle kennt die untergeordnete erstmal nicht, die untergeordnete weiß aber über den Fremdschlüssel welche Tabelle ihr übergeordnet ist. Da hast Du einen ganz großen Denkfehler drinnen, der dann zu Deinem Problem führt.

Du hast jetzt eine 1:1 Beziehung. D.h. eine Person hat genau eine Adresse. Sofern das richtig wäre könnte man sich die zweite tabelle auch direkt sparen und alles in einer tabelle zusammenbauen (machen wir aber natürlich nicht, denn wir wollen für eine Person ja auch mehrere Adressen angeben können).

Augenscheinlich haben diesen Denkfehler aber wohl mehrere ;) Also ruhig nachmachen.

Dim

Wow Dim - danke vielmals. War kurze Zeit in den Ferien, konnte deswegen das Forum nicht öffnen .. :)

Wie immer eine Top Antwort von dir.

Danke & Gruss

ugly

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...