Zwei Designfragen

David777

Benutzer
Beiträge
13
Hey Leute,
Vielleicht habt ihr ja eine Idee zu meinen beiden Fragen:

Frage 1:


Angenommen ich habe eine Tabelle "Studenten", in der Studenten gespeichert sind und eine Tabelle "Adressen", in der ihre Adressen gespeichert sind. Beide Tabellen sollen verknüpft sein. Hier gibt es jetzt zwei Möglichkeiten:

A: Die Studententabelle bekommt ein Feld AdressID, wo der Primärschlüssel der Adresstabelle gespeichert ist. Dies war meine erste Idee, doch was passiert wenn ein Student keine Adresse hat? Dann gäbe es NULL-Werte in diesem Feld.
Also ist vielleicht doch B besser?: Die Adresstabelle bekommt ein Feld mit der StudentID, sodass zu jeder Adresse genau ein gültiger Student gehört. Es gäbe also keine NULL-Werte.

Würdet Ihr A oder B präferieren?

Frage 2:

Angenommen ich möchte eine Entität in einer Datenbank abbilden, zu der es sehr viele Attribute gibt, die oft nicht bekannt sind. Z.B. könnte ich eine Tabelle „Student“ haben mit 100 Attributen, von denen alle zwar abgebildet werden sollen können, jedoch meistens sowieso nur 5 der 100 Attribute bekannt sind. Dies würde zu unglaublich vielen NULL-Werten führen. Gibt es einen Konsens darüber, wie man so etwas verhindern kann? Eine Art Best practice?

Liebe Grüße

David
 
Werbung:
1) Weder noch. So wie du es beschreibst hat ein Student immer maximal eine Adresse und eine Adresse gehört immer nur einem Studenten. Wenn das so gewollt ist dann gehört beides in die selbe Tabelle denn die Adresse ist ein Atribut der Entität Student. Zwei Tabellen machen nur bei einer 1:n Bezeihung Sinn.

2) NULL Werte verbrauchen (fast) keinen Platz und vermutlich auch keine Performance. Du könntest es wie unter 1 machen würdest aber deinen Aufwand deutlich erhöhen und i.S. Speicher und Performance negative Folgen haben. Ich würde es als Konsens ansehen diese Spalten einfach anzulegen und nur bei Bedarf zu nutzen. Vorrausgesetzt, es handelt sich wirklich um Attribute die einfach nicht bekannt sind, die aber zur Entität gehören. Wenn die Attribute nicht existieren verhält sich die Sache durchaus anders (Beispiel Entität "Tier" mit Attributen wie "Anzahl Beine" und "Anzahl Flügel").
 
Zu 2.:

Solche Dinge lassen sich sehr schön als JSON-Dokument speichern - und in modernen Datenbanken wie PostgreSQL kannst Du in JSON-Dokumenten sogar indexbasiert suchen. Ich gehe davon aus, daß zum Zeitpunkt der Erstellung der Tabelle gar nicht abzusehen ist, welche Spalten nötig wären - auch daher böte sich JSON an.
 
1) Weder noch. So wie du es beschreibst hat ein Student immer maximal eine Adresse und eine Adresse gehört immer nur einem Studenten. Wenn das so gewollt ist dann gehört beides in die selbe Tabelle denn die Adresse ist ein Atribut der Entität Student. Zwei Tabellen machen nur bei einer 1:n Bezeihung Sinn.

Ehrlich gesagt bin ich hier etwas anderer Meinung. Die dritte Normalform besagt schließlich, dass ein Attribut innerhalb einer Tabelle nur von einem Schlüssel abhängen sollte. In meinem Fall sollte die Adrese also auf jeden Fall in eine andere Tabelle, denn Straße, PLZ etc. hängen schließlich vom Namen ab.

Weil ein Student allerdings auch keine Adresse haben kann, wollte ich hier nur fragen, ob ich daher lieber auf NULL-Werte in der Studententabelle verzichten sollte und in der Adresstabelle eben nur die StudentenID als Sekundärschlüssel verwenden sollte.
 
:-D Schon verstanden. Das ergibt wirklich Sinn.

1) Weder noch. So wie du es beschreibst hat ein Student immer maximal eine Adresse und eine Adresse gehört immer nur einem Studenten. Wenn das so gewollt ist dann gehört beides in die selbe Tabelle denn die Adresse ist ein Atribut der Entität Student. Zwei Tabellen machen nur bei einer 1:n Bezeihung Sinn..

okay, aber sollte ich nicht sowieso davon ausgehen, dass es später noch andere Entitäten gibt, die ebenfalls eine Adresse haben? Also sollte die Adresse doch ohnehin immer in eine extra Tabelle, sonst wiederholt sich die Struktur ja immer wieder... ?
 
Werbung:
Natürlich gibt es viele Möglichkeiten warum das mit einer Adresstabelle durchaus Sinn macht, auch in deinem Beispiel. Ich würde auch PLZ und Ortsname einfach so in diese Tabelle schreiben, das erlaube ich mir mal :) Aber diese Normalformen können ganz schön ausarten.

Ich würde auch keine Tabelle Studenten anlegen sondern eine für (natürliche) Personen.
 
Zurück
Oben