AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Gestaltung der Tabellen in einer DB
Thema durchsuchen
Ansicht
Themen-Optionen

Gestaltung der Tabellen in einer DB

Ein Thema von Mirilin · begonnen am 19. Aug 2004 · letzter Beitrag vom 20. Aug 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Mirilin
Mirilin

Registriert seit: 21. Dez 2002
Ort: Lenzburg
861 Beiträge
 
Delphi 6 Professional
 
#1

Gestaltung der Tabellen in einer DB

  Alt 19. Aug 2004, 20:33


Ich habe eine Frage, bezüglich der Form meiner Tabellen.
Und zwar habe ich vor - um einwenig Datenbankprogrammierungs-Luft zuschnappen - eine DBs mit meinen Büchern anzulegen. Nun hab ich das Problem mit den Tabellen, wie ich das am Besten mache.

Ich hatte mir gedacht, dass ich eine Tabelle anlege, die den Buchtitel und ISBN etc enthält. Die Autoren wollte ich in einer separaten Tabelle auflisten (da ja ev verschiedene Bücher von einem Autor vorhanden sind). Nun hab ich das Problem, wie ich das am Besten mache.
Wenn ich in der Buchtabelle ein Feld mache, in welchem die ID des Autors steht, dann habe ich das Problem mit den Büchern, die mehrere Autoren haben.

Ich habe überhaupt keine Idee, wie ich das klug lösen könnte.


mfg Tobias
Tobias
Die Physik ist für die Physiker eigentlich viel zu schwer.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: Gestaltung der Tabellen in einer DB

  Alt 19. Aug 2004, 20:35
Wo gibts denn so was ? Mirilin und Datenbanken.

Ich würde max. 3 Autoren pro Buch vorsehen. Sind es noch mehr, so müssen die eben irgendwie abgekürzt in den 3 Feldern untergebracht werden. Deshalb würde ich die Felder nicht zu klein machen.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Gestaltung der Tabellen in einer DB

  Alt 19. Aug 2004, 20:46
Tabelle Bücher:
ISBN-Nummer (Primärschlüssel: PK)
Titel

Tabelle Autoren:
ID (PK)
Name,
Vorname,
...

Tabelle Buchautoren:
ISBN-Nummer
Laufende Nummer
Autoren-ID

Damit können auch mehrere Autoren an einem Buch geschrieben haben.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Mirilin
Mirilin

Registriert seit: 21. Dez 2002
Ort: Lenzburg
861 Beiträge
 
Delphi 6 Professional
 
#4

Re: Gestaltung der Tabellen in einer DB

  Alt 19. Aug 2004, 20:46


Danke schonmal.
Dann könnt ich ja auch gleich in der Haupttabelle ein Feld für die Autoren machen, aber das kommt mir irgendwie nicht "sauber" vor ^^ weiss auch nicht warum.
Code:
Haupttabelle
+----+---------+-----------+-----------+-----------+---------+
+ ID | Titel  | Autor1-ID | Autor2-ID | Autor3-ID | ....   |

AutorTabelle
+----+------------+
| AID| Name      |
Das wäre ja eine möglichkeit, aber dann sind die Autoren eben begrenzt und gefalten tut es mir auch nicht ^^

Oder wie hast Du es genau gemeint?

mfg Tobias
Tobias
Die Physik ist für die Physiker eigentlich viel zu schwer.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Gestaltung der Tabellen in einer DB

  Alt 19. Aug 2004, 20:48
Zitat von Hansa:
Ich würde max. 3 Autoren pro Buch vorsehen. Sind es noch mehr, so müssen die eben irgendwie abgekürzt in den 3 Feldern untergebracht werden. Deshalb würde ich die Felder nicht zu klein machen.
Tut mir leid, aber so löst man die Art Probleme nicht. Mirlins Problem beschreibt eine klassische n:n Beziehung zwischen 2 Tabellen, sprich, ein Autor kann mehrere Bücher schreiben, sowie ein Buch kann von mehreren Autoren sein...
Die Lösung ist eine 3. Tabelle, welche die Beziehungen zwischen den beiden anderen Tabellen herstellt. Für die Tabelle reichen im Prinzip 3 Spalten aus: 1. ein Primary Key (gehört immer rein), 2. ein Foreign Key zur Bücher Tabelle und 3. man glaubt es nicht: ein Foreign Key auf die Autoren Tabelle. Zusätzlich sollte man noch ein Unique Index auf die beiden letzt genannten Spalten legen, um doppelte Einträge gleich im Vorfeld zu vermeiden...

Gruß,
Tom
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: Gestaltung der Tabellen in einer DB

  Alt 19. Aug 2004, 20:55
Bín eben Praktiker. Wie oft kommt es vor, daß es z.B. 5 Autoren gibt ? Aber Bernhard Geyers Vorschlag ist der sauberste. Er dreht quasi Mirilins Vorhaben um. Nicht die Autoren werden bei den Büchern gespeichert, sondern die Bücher bei den Autoren. Sucht man nun die Autoren zu einem Buch, so genügt es, die Autorentable nach der ISBN zu durchsuchen.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Mirilin
Mirilin

Registriert seit: 21. Dez 2002
Ort: Lenzburg
861 Beiträge
 
Delphi 6 Professional
 
#7

Re: Gestaltung der Tabellen in einer DB

  Alt 19. Aug 2004, 20:56


herzlichen Dank für Eure Antworten *verneig*


mfg Tobias
Tobias
Die Physik ist für die Physiker eigentlich viel zu schwer.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Gestaltung der Tabellen in einer DB

  Alt 19. Aug 2004, 20:58
Zitat von Hansa:
Bín eben Praktiker. Wie oft kommt es vor, daß es z.B. 5 Autoren gibt ? Aber Bernhard Geyers Vorschlag ist der sauberste. Er dreht quasi Mirilins Vorhaben um. Nicht die Autoren werden bei den Büchern gespeichert, sondern die Bücher bei den Autoren. Sucht man nun die Autoren zu einem Buch, so genügt es, die Autorentable nach der ISBN zu durchsuchen.
Sorry, immer noch nicht Die Lösung von Bernhard verwendet eben auch 3 Tabellen. Und damit kannst du rein theoretisch 1 Milion Bücher pro Autor haben und 1 Million Autoren pro Buch.

Gruß,
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Gestaltung der Tabellen in einer DB

  Alt 19. Aug 2004, 20:59
Zitat von Hansa:
Er dreht quasi Mirilins Vorhaben um.
Nich ganz umgedreht. Es lößt nur die n:m-Beziehung von der Jelly redet in Tabellen auf.

Vieleicht besser:
Tabelle Buchautoren:
ISBN-Nummer (PK)
Autoren-ID (PK)
Autorenstatus (z.B. H = Hauptautor, N = Nebenautor, L = Lektor, ....)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#10

Re: Gestaltung der Tabellen in einer DB

  Alt 19. Aug 2004, 20:59
Ihr habt da einen Klassiker am Wickel - der einzig Sinnvolle Weg, soetwas zu lösen und im Zweifel weder ein Feld zu wenig oder zu viel noch so böse böse Ideen wie die vom Hansa verwirklichen zu müssen lautet: Zwischentabelle!

Delphi-Quellcode:
                             +---------------------+
                             |Tabelle Buch_Autor |
+--------------------+ +---------------------+
|Tabelle Bücher | |idBuch_Autor(int)(PK)|
+--------------------+ | |
|idBuch (int)(PK) |<------|idBuch (int) (FK) |
| | | |
|... weitere Felder | +---|idAutor (int) (FK) |
| | | | |
+--------------------+ | +---------------------+
                         |
+--------------------+ |
|Tabelle Autoren | |
+--------------------+ |
|idAutor (int)(PK) |<--+
| |
|... weitere Felder |
+--------------------+
(PK) steht für Primary Key (Primärschlüssel) ein Tabellenweit eindeutiger Wert (einfachste Variante: fortlaufende Zahl /Autoincrement)

(FK) steht für Foreign Key (Fremdschlüssel), verweist auf genau einen Datensatz in der bezogenen Tabelle

Wenn mann nun einen Autor hat, der 2 Bücher geschrieben hat, legt man einfach 2 Datensätze in der Tabelle Buch_Autor an, die beide auf den selben Autor, aber auf unterschiedliche Bücher zeigen.

Hat man ein Buch, an dem 3 Autoren mitgewirkt haben, legt man 3 Datensätze in der Tabelle Buch_Autor an, die alle auf das selbe Buch, jedoch auf jeweils andere Autoren zeigen.

Um solche "normalisierten" Tabellen wieder in einer Abfrage zu einem logisch zusammenhängenden Datensatz zusammenzufügen, benutzt man Joins.

Soviel als kleine Einführung.
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz