SQL bestehende Datenbank mit identischer Kategorie erweitern

ScoutX

Captain
Registriert
März 2003
Beiträge
3.833
Erfundenes Beispiel:
Eine MySQL Tabelle mit AuthorID und Kategorie Author.
Weitere Tabelle ISBNID, ISBN, Buch, AuthorID

Problem besteht nun, dass der User mindestens noch einen zweiten Author auch bei alten Datensätzen angeben möchte.

Bin nicht erfahren im Abändern von bestehenden Datenbanken. Wäre sicherlich von Anfang an über eine Zwischentabelle gegangen AuthorISBNID, AuthorID,ISBNID.

Da diese Tabelle aber nicht existiert, habe ich nun welche Möglichkeiten?
Die Datenbank ist sehr groß. Dachte mir die Tabelle der Autoren zu kopieren, und die ID umzuändern. Dies hat aber gravierende Einflüße auf die Edition und Abfragen von neuen und alten Authoren.
 
Füge doch einfach eine neue Tabelle ein:

Author_ oder so..

PHP:
ALTER TABLE  `tbl` ADD  `zweiterauthor` VARCHAR( 30 ) NOT NULL AFTER  `AuthorID` ;

Oder verstehe ich gerade Dein Problem nicht?

Poste doch mal deine Datenbankstruktur.
 
Das geht so nicht. Ich brauche die 4NF. Hinzu kommt bei meinem Problem, dass mindestens noch x weitere Felder Ergänzungen erfahren sollen, z.B auch doppelte Kategorien (Sci-FI, Belletristik..)

Es muss eigentlich eine Tabellenstruktur folgender Art sein (P, Primärschlüssel oder zusammengefasster Primärschlüssel).
Unter Umständen gibt es in dem Datensatz auch Probleme mit Tabelle 2 (s.u.), da doppelte Authorennamen existieren aber andere Individuen. Zur Unterscheidung wohlmöglich noch ein weiteres Merkmal wie Geburtstag.

Tabelle 1 (ISBN auch Primärschlüssel, da Unique)
ISBNID(P) - ISBN(P) - Buchtitel

Tabelle 2
AuthorID(P) - Author - Geburtstag

Tabelle 3
KategorieID(P) - Kategorie

Tabelle 4 (für Mehrfachauthornennung)
ISBNID (P) - AuthorID(P)

Tabelle5 (für Mehrfachkategorien)
ISBNID(P) - KategorieID(P)

Die aktuelle Datenstruktur sieht fast so aus wie in meinem ersten Post. Eine Haupttabelle mit sehr vielen Spalten und dadurch sehr viel Redundanz + eine weitere Tabelle mit der Auflistung aller "Authoren"
Im Prinzip hätte man diese Tabelle auch fallen lassen können. Nun macht gerade diese Probleme, da sie als einzige Kategorie relativ zur Haupttabelle ist.
Stellt euch einfach ein riesiges Datenaufkommen vor mit einer fortlaufenden ID.

Eine zweite Tabelle Author würde zwar die Eingabe eines weiteren Authoren ernöglichen, aber den Datenwust noch vergrößern. Außerdem müsste man dann noch eine Abfrage starten, die beide Autorentabellen mit einschließt. Ich wollte es eigentlich vermeiden mit AuthorID1 und AuthorID2 zu arbeiten, denn es können auch mehr als nur zwei sein, was wiederum einer Erweiterung von Nöten hätte.
 
Ohne einiges an Aufwand ist das nicht zu bewerkstelligen. Deine Tabellen sehen aber schon mal korrekt aus. Die Kunst liegt nun darin, die vorhandenen Werte in die Autoren Tabelle einzutragen. Das sollte beispielsweise über eine insert Klausel die in etwa so aussehen könnte:

Code:
 INSERT INTO 'Tabelle 2' (Author) VALUES (SELECT author FROM 'alteTabelle' GROUP BY author)

Die SELECT-Abfrage vorher mal testen, dort sollten dann nur unterschiedliche Autoren gelistet werden. Beim MS SQL Server funktioniert das zumindest so ;-)

Anschließend kann man über eine weitere insert Anweisung Tabelle 4 auffüllen. Ungefähr so:

Code:
 INSERT INTO 'Tabelle 4' (ISBNID, AuthorID) VALUES 
                                (SELECT 'alte Tabelle'.'ID' , 'Tabelle 4'.'AuthorID' 
                                 FROM 'alte Tabelle', 'Tabelle 4'
                                 WHERE 'alte Tabelle'.'Author' = 'Tabelle 2'.'Author')

Ich hoffe, ich bin jetzt nicht durcheinandergekommen :D
 
Zuletzt bearbeitet:
Zurück
Oben