Welche Datenbankschemata vereinfacht die Verwaltung und die Aktualisierung dieser Daten

Genau. Ich will die Historischen Daten erhalten. Die Folgende Beziehung über meine Beziehungstabelle erstellen.

Dozent A 2010 - 2012 Vorlesung 1|Mathematics
Dozent A 2013 - 2014 Vorlesung 1|Calculus

1 ist die Vorlesungsnummer. Die Vorlesungsnummer bleibt unverändert aber der Name der Vorlesung wird geändert.

Ich habe die Beziehung jetzt nur über Vorlesungsnummer erstellt und ich bekomme deswegen für jedes Jahr die Beiden Vorlesungen weil sie die gleiche ID besitzen.

Ich will keine neue ID generieren. Dein Vorschlag ist genau was ich will. Ich habe aber leider deine Lösung nicht verstanden :(
kannst du das mit einem zusätzlichen Attribut in tbl_vorlesung machen. Dabei setzt du einfach einen optionalen Fremdschlüssel auf die ID der selben Relation.

Was meinst du damit?
 
Zuletzt bearbeitet:
Werbung:
Ich habe die Beziehung jetzt nur über Vorlesungsnummer erstellt und ich bekomme deswegen für jedes Jahr die Beiden Vorlesungen weil sie die gleiche ID besitzen.
Dann ist es kein Primärschlüssel. Primärschlüssel sind per Definition einzigartig.

Ich will keine neue ID generieren. Dein Vorschlag ist genau was ich will.
Wenn ein einzelnes Attribut als Schlüssel nicht ausreicht musst du entweder den Schlüssel erweitern oder dein Design ändern und für jede neue Variante eine neue ID vergeben.

Um den Schlüssel zu erweitern kannst du zum Beispiel eine Versionsnummer angeben die mit jeder Umbenennung hochgezählt wird:
Code:
Dozent A 2010 - 2012 Vorlesung (1|1)|Mathematics
Dozent A 2013 - 2014 Vorlesung (1|2)|Calculus

Die meiner Ansicht nach sinnvollere Möglichkeit wäre es eben eine neue ID zu vergeben und die "Parent-ID" mitzuspeichern:
Code:
Dozent A 2010 - 2012 Vorlesung 1|NULL|Mathematics
Dozent A 2013 - 2014 Vorlesung 2|1|Calculus

An einer Änderung oder Erweiterung der ID wirst du nicht vorbei kommen.
 
Danke Nochmal für deine Antwort. Diese Versionierungsansatz der Einträge und die Beziehungstabelle sind aber nicht kombinierbar. Ich konnte sie zumindest nicht kombinieren.

So war meine Datenbankschema. Kurz nochmal zu Erinnerung: Die Id der Tabelle Vorlesung war die Richtige Kennzeichen der Vorlesungen. Mein Problem war dass ich keine eindeutige Vorlesungsid hatte weil manchmal der Name der Vorlesung sich ändert aber der Vorlesungskennzeichen beleibt unverändert.

upload_2014-10-6_11-1-30.png
Nach deiner Anweisungen habe ich für die Tabelle Vorlesung wie folgt noch eine Spalte hinzugefügt und den Primärschlüssel über zwei Einträge definiert. Du wolltest ich soll die Einträge irgendwie versionieren. Ich will als Version das Hinzufügungsdatum der Vorlesung benutzen. Wenn der Name eine Vorlesung geändert wird aber der Vorlesungskennzeichen unverändert bleibt, erzeuge ich eine neue Eintrag mit gleiche vorlesung_id aber mit eine Unterschiedliche vorlesung_start.

upload_2014-10-6_11-1-44.png
Jetzt hat die Tabelle Vorlesung einen eindeutigen Primärschlüssel über 2 Einträge.

Wie mache ich aber die Verbindung zwischen Tabelle Vorlesung und die Tabelle Beziehungen oder muss ich sie nicht miteinander verbinden? Wie sollen die abfragen denn aussehen?
 
EIN ZWEITER VORSCHLAG:

upload_2014-10-6_11-35-23.png

In diesen Schema benutze ich die folgende Abfrage:

SELECT vorlesung_name
FROM tbl_beziehung
INNER JOIN tbl_vorlesung
ON vorlesung_ref = vorlesung_id
WHERE beziehung_start <= getdate()
AND ( beziehung_ende >= getdate()
OR beziehung_ende IS NULL )

Wenn der Name sich ändert. Mit dieser Abfrage bekomme ich den Beiden Vorlesungen mit der gleiche vorlesung_id aber unterschiedliche Namen. Weil die Beziehung nur über einen Fremdschlüssel ist.


Ist so eine Lösung sinnvoll:
upload_2014-10-6_11-33-35.png

Ich habe nur noch 2 spalten für die Vorlesungen hinzugefügt. Vorlesung_start und Vorlesung Ende.
Meine Abfragens sollen wie folgt aussehen:

SELECT vorlesung_name
FROM tbl_beziehung
INNER JOIN tbl_vorlesung
ON vorlesung_ref = vorlesung_id
WHERE beziehung_start <= getdate()
AND ( beziehung_ende >= getdate()
OR beziehung_ende IS NULL )
AND (
vorlesung_start <= getdate()
AND ( vorlesung_ende >= getdate()
OR vorlesung_ende IS NULL )
)

Ich finde aber die Abfragen bisschen komplex. Ist so alles in ordunng?
 
Zuletzt bearbeitet:
Ich finde aber die Abfragen bisschen komplex. Ist so alles in ordunng?
Das ist so komplex weil du dich weigerst eine neue ID bei Änderungen zu vergeben. Auf den ersten Blick sollte das aber funktionieren können.

Wenn ich nicht ganz falsch liege können 2 Vorlesungen mit, in deinem Modell, gleicher ID nie gleichzeitig gehalten werden. Daher halte ich die zusätzlichen Datumswerte für potentiell redundant. In jedem Fall aber erzeugst du damit eine neue potentielle Fehlerquelle. Ohne jetzt eine fachliche Begründung parat zu haben bereitet mir deine Lösung Bauchschmerzen.

Der Gedanke hinter der Parent-ID ist der, dass trotz wechselnder ID der Bezug zu vorherigen und gleichartigen Vorlesungen erhalten bleibt ohne die Abfrage selbst komplexer werden zu lassen.
 
@Hony% Ich will eigentlich tune was du mir empfohlen hast. Ich habe aber nicht verstanden wie meine Abfragen aussehen sollen?

So ist meine Datenbankschema:
upload_2014-10-7_10-44-51.png
Nehmen wir an, ich habe die folgenden Einträge in der Tabellen.

Tbl_dozent
|1| Max Musterdozent

Tbl_Beziehungen
|1|1|2011|2012|
|1|2|2012|2013|
|1|3|2013|2014|
|1|4|2014|null|
Es gibt noch mehrere Einträge

Tbl_Vorlesung
1|NULL|Einfüghrung in die Informatik
2|1 |Grundlagen der Informatik
3|2 |Introduction to Computer Science
4|3 |Computer Science 101
Es gibt noch mehrere Einträge

In diesem Beispiel wurde der Vorlesungsname jedes Jahr geändert aber Kennzeichen der Vorlesung bleibt unverändert. Dieser Vorlesung heißt im Jahr 2011 „Einführung in die Informatik“, im Jahr 2012 „Grundlagen der Informatik“, im Jahr 2013 „Introduction to Computer Science“ und im Jahr 2014 bis jetzt „Computer Science 101“.

Kennzeichen dieser Vorlesung ist immer 1. Wenn ich das Kennzeichen abfrage, muss ich 1 bekommen.

Könntest du mir bitte eine Abfrage schreiben in der Kennzeichen aller Vorlesungen vom Jahr 2013 selektiert wird.
 
Könntest du mir bitte eine Abfrage schreiben in der Kennzeichen aller Vorlesungen vom Jahr 2013 selektiert wird.

Ich glaube ich komme langsam hinter das Problem. Liege ich richtig wenn ich annehme, dass das Kennzeichen quasi eine eigenständige Nummer ist die von der Fakultät zu Verwaltungszwecken vergeben wird?

In diesem Fall würde ich Tbl_Vorlesung so gestalten:
Tbl_Vorlesung=(vorlesung_id, vorlesung_kennzeichen, vorlesung_name)

Damit ändert sich an der bisherigen Abfrage nichts und du kannst dir zu vorlesung_name im SELECT auch das Kennzeichen ausgeben lassen. Eine Parent-ID ist dann auch nicht mehr nötig, da die Verwandtschaft bereits über das Kennzeichen abgebildet wird.

Die ID dient dazu dein Tupel eindeutig zu machen während dein Kennzeichen ein eigenständiges Attribut ist. Da sich das Attribut aber wiederholen kann ist es als ID für die Datenbank ungeeignet.

Gruß
Hony
 
Werbung:
Zurück
Oben