allgemeine Frage zum Literatur-DB-Konzept
Verfasst: Mo, 30.01.2012 20:41
Liebes Forum,
ich bin neu hier und hoffe auf einige Tipps zu meinem ersten DB-Projekt mit Base.
Es geht zunächst ganz grob um eine Datenbank die mit der Zeit (d.h. in ferner Zukunft) verschiedene Aufgaben an einer Forschungsstelle koordinieren und vereinfachen soll. Zunächst geht es aber um eine der wichtigsten Kernaufgaben, nämlich die Archivierung von Literatur an unterschiedlichen Standorten. Ich habe bereits mit einer Datenbank angefangen und habe mich zunächst – als blutiger Anfänger – an einer Datenbankstruktur orientiert, die an einer ähnlichen Forschungsstelle bereits erstellt wurde. Das Problem ist, dass diese DB von jemandem erstellt wurde, der von Datenbank-Konzepten scheinbar keine Ahnung hatte. Dies fiel mir allerdings erst nach der Lektüre zahlreicher Einführungen, Tutorials und Forumthreads auf. Seine DB-"Struktur" bestand aus einer einfachen flachen Tabelle mit einem einzigen Eingabeformular (> 50 Datenfelder).
Um die Stärken einer Datenbank wirklich zu nutzen, würde ich die Tabelle gerne in viele einzelne Tabellen sinnvoll aufteilen. Das Prinzip bzw. die Maxime glaube ich auch grundsätzlich verstanden zu haben (Normalisierung → keine Dopplungen / einzigartige Datensätze, entspr. Relationen etc.), allerdings steckt der Teufel ja meist im Detail. Ich würde gerne alles, oder das meiste, von Anfang an richtig machen, da die Struktur einer Datenbank – wie ich selbst bereits bemerkt habe – im Nachhinein nur schwierig zu verändern ist.
Ich will euch hier nicht die gesamte Struktur beurteilen lassen, da ich hier niemanden überstrapazieren möchte. Deswegen stelle ich zunächst vielleicht eine ganz konkrete Frage, zu einem konkreten Problem.
Das Ziel ist zunächst, dass verschiedene Mitarbeiter Texte archivieren und die entsprechenden Informationen (>50 Datenfelder) in ein zentrales Formular eintragen. Es soll so einfach wie möglich sein, deswegen sollte alles in einem Formular (mit entspr. Subformularen) ablaufen.
Jetzt konkreter: An einem Text oder Buch sind meist mehrere Personen beteiligt ([mehrere] Autoren, [mehrere] Herausgeber, Übersetzer etc.) Ich habe mich dazu entschlossen (wie es auch in Bibliographien sonst üblich ist), mich auf drei beteiligte Personen zu beschränken. Wie ließe sich das nun strukturell auflösen? Mein erster, aber falscher Ansatz ist der folgende:
[Archiv]
#ID → primary Key
#Titel
#Standort
...
#Person1-ID → foreign key [Personen:#ID]
#Person1-Funktion-ID → foreign key [Funktion:#ID] (d.h. Autor, Herausgeber, Übersetzer etc.)
#Person2-ID → foreign key [Personen:#ID]
#Person2-Funktion-ID → foreign key [Funktion:#ID]
#Person3-ID → foreign key [Personen:#ID]
#Person3-Funktion-ID → foreign key [Funktion:#ID]
...
[Personen]
#ID → primary key
#Name
#GebDatum
...
[Funktion]
#ID → primary Key
#Funktion
(Ich hoffe die Tabellen sind einigermaßen selbsterklärend.)
Das Problem ist es nun, die Tabellen mit den richtigen Relationen zu verbinden. 1:n-Relationen sind – soweit ich das sehen kann – nicht möglich, da eine Tabelle (i.d.F. [Archiv]) nicht mehrere Fremdschlüssel aus einer anderen Tabelle enthalten kann. Außerdem kann ein Titel von mehreren Personen geschrieben werden und eine Person kann mehrere Titel schreiben. Wäre das dann nicht eine n:m-Relation? Das trifft doch auch auf die Relation [Archiv]<->[Funktion] zu. Oder verstehe ich hier grundsätzlich etwas falsch? Falls es sich um eine n:m-Relation handelt, ist mir auch noch nicht ganz klar, wie ich diese realisieren kann.
Bei meiner Recherche im Netz und hier im Forum konnte ich leider keine hilfreiche Antwort finden. Ich weiß, dass diese Frage in der einen oder anderen Form schon häufig gestellt wurde, aber mir ist scheinbar einiges noch nicht ganz klar geworden. Ich würde mich sehr über einen kleinen Hinweis freuen
Viele Grüße, Albert
LibreOffice 3.4.5
Ubuntu 11.10
ich bin neu hier und hoffe auf einige Tipps zu meinem ersten DB-Projekt mit Base.
Es geht zunächst ganz grob um eine Datenbank die mit der Zeit (d.h. in ferner Zukunft) verschiedene Aufgaben an einer Forschungsstelle koordinieren und vereinfachen soll. Zunächst geht es aber um eine der wichtigsten Kernaufgaben, nämlich die Archivierung von Literatur an unterschiedlichen Standorten. Ich habe bereits mit einer Datenbank angefangen und habe mich zunächst – als blutiger Anfänger – an einer Datenbankstruktur orientiert, die an einer ähnlichen Forschungsstelle bereits erstellt wurde. Das Problem ist, dass diese DB von jemandem erstellt wurde, der von Datenbank-Konzepten scheinbar keine Ahnung hatte. Dies fiel mir allerdings erst nach der Lektüre zahlreicher Einführungen, Tutorials und Forumthreads auf. Seine DB-"Struktur" bestand aus einer einfachen flachen Tabelle mit einem einzigen Eingabeformular (> 50 Datenfelder).
Um die Stärken einer Datenbank wirklich zu nutzen, würde ich die Tabelle gerne in viele einzelne Tabellen sinnvoll aufteilen. Das Prinzip bzw. die Maxime glaube ich auch grundsätzlich verstanden zu haben (Normalisierung → keine Dopplungen / einzigartige Datensätze, entspr. Relationen etc.), allerdings steckt der Teufel ja meist im Detail. Ich würde gerne alles, oder das meiste, von Anfang an richtig machen, da die Struktur einer Datenbank – wie ich selbst bereits bemerkt habe – im Nachhinein nur schwierig zu verändern ist.
Ich will euch hier nicht die gesamte Struktur beurteilen lassen, da ich hier niemanden überstrapazieren möchte. Deswegen stelle ich zunächst vielleicht eine ganz konkrete Frage, zu einem konkreten Problem.
Das Ziel ist zunächst, dass verschiedene Mitarbeiter Texte archivieren und die entsprechenden Informationen (>50 Datenfelder) in ein zentrales Formular eintragen. Es soll so einfach wie möglich sein, deswegen sollte alles in einem Formular (mit entspr. Subformularen) ablaufen.
Jetzt konkreter: An einem Text oder Buch sind meist mehrere Personen beteiligt ([mehrere] Autoren, [mehrere] Herausgeber, Übersetzer etc.) Ich habe mich dazu entschlossen (wie es auch in Bibliographien sonst üblich ist), mich auf drei beteiligte Personen zu beschränken. Wie ließe sich das nun strukturell auflösen? Mein erster, aber falscher Ansatz ist der folgende:
[Archiv]
#ID → primary Key
#Titel
#Standort
...
#Person1-ID → foreign key [Personen:#ID]
#Person1-Funktion-ID → foreign key [Funktion:#ID] (d.h. Autor, Herausgeber, Übersetzer etc.)
#Person2-ID → foreign key [Personen:#ID]
#Person2-Funktion-ID → foreign key [Funktion:#ID]
#Person3-ID → foreign key [Personen:#ID]
#Person3-Funktion-ID → foreign key [Funktion:#ID]
...
[Personen]
#ID → primary key
#Name
#GebDatum
...
[Funktion]
#ID → primary Key
#Funktion
(Ich hoffe die Tabellen sind einigermaßen selbsterklärend.)
Das Problem ist es nun, die Tabellen mit den richtigen Relationen zu verbinden. 1:n-Relationen sind – soweit ich das sehen kann – nicht möglich, da eine Tabelle (i.d.F. [Archiv]) nicht mehrere Fremdschlüssel aus einer anderen Tabelle enthalten kann. Außerdem kann ein Titel von mehreren Personen geschrieben werden und eine Person kann mehrere Titel schreiben. Wäre das dann nicht eine n:m-Relation? Das trifft doch auch auf die Relation [Archiv]<->[Funktion] zu. Oder verstehe ich hier grundsätzlich etwas falsch? Falls es sich um eine n:m-Relation handelt, ist mir auch noch nicht ganz klar, wie ich diese realisieren kann.
Bei meiner Recherche im Netz und hier im Forum konnte ich leider keine hilfreiche Antwort finden. Ich weiß, dass diese Frage in der einen oder anderen Form schon häufig gestellt wurde, aber mir ist scheinbar einiges noch nicht ganz klar geworden. Ich würde mich sehr über einen kleinen Hinweis freuen

Viele Grüße, Albert
LibreOffice 3.4.5
Ubuntu 11.10