Haben Sie schon einmal an einer produktiv - Datenbank versucht eine oder mehrere Tabellen
von einer 1:1 Verknüpfung in eine 1:n Verknüpfung zu erweitern?
Im ersten Moment sieht das Ganze ein wenig komliziert aus aber es gibt einen relativ einfachen Weg es zu realisieren. Dies ist auch eine ganz einfache Methode ein Update einer vorhandenen Installation zu machen.
Stellen Sie sich einmal vor, ein Verlag publiziert online Artikel zu bestimmten Themen, die
in einem SQL Server gespeichert sind.
Nun war es am Anfang so, dass ein Artikel zu einem Autor gehört. Die Komplexität der
aktuell zu schreibenden Artikel fordert aber nun, dass mehrere Autoren an einem Artikel
schreiben können. Dass heisst, dass die Tabellen Artikel und Autor geändert werden müssen.
Zusätzlich kommt noch eine Tabelle hinzu die als Schlüsseltabelle zwischen Autor und Artikel
agiert.
Früher:
1 Artikel -> 1 Autor
Jetzt:
1 Artikel -> 1 Autor
2 Autor
.....
n Autor
Artikel (-Tabelle) ArtikelID AutorID ....... 1 34 2 67 3 89 |
Autor (-Tabelle) AutorID Name ....... 34 Strasser 67 Ulm 89 Preishuber |
hier sehen sie nun das Problem. In der Tabelle Artikel kann in der Spalte AutorID nur
ein Autor stehen.
Hinzu kommt noch, dass das Frontend (hier eine asp - Applikation) noch weiter mit den
alten Daten bzw. der alten Tabelle weiterarbeiten soll und erst einige Zeit später
aktualisiert wird. Nun ist guter Rat teuer ! - Aber im Wesentlichen nicht so schwierig -
Ich benötige zuerst eine neue Tabelle, wie ich oben schon angedeutet habe.
Diese neue Tabelle sollte wie folgt aussehen.
ArtAutor (-Tabelle) ArtID AutorID |
Danach muss ich die Artikel -> Autoren in diese Tabelle schreiben.
Bei einer geringen Anzahl an Daten mag das alles ein wenig kompliziert klingen, aber stellen Sie sich einmal vor sie haben schon einige hunderttausende von Artikeln !
Es liegt nahe für diese Aufgabe ein SQL - Script zu schreiben welche die neue Tabelle
anlegt und die Daten in diese neue Tabelle einfügt. Nun an die Arbeit
/* Strasser Shinja, ppedv AG*/
use XDBcreate table [dbo].[ArtAutor] ( [ArtID] [int] NULL , [AutorID] [int] NULL ) ON [PRIMARY] go declare @eid int --Artikel ID declare @aid int --Autor ID declare iartikel_cursor cursor for --Cursor for select ArtikelID, AutorID from Artikel open iartikel_cursor fetch next from iartikel_cursor into @eid, @aid --get first row while @@FETCH_STATUS = 0 begin insert into ArtAutor (ArtID,AutorID) values (@eid, @aid) --transfer data fetch next from iartikel_cursor into @eid, @aid --next row end close iartikel_cursor deallocate iartikel_cursor go |
Was ist nun geschehen ?
Ich habe zuerst eine neue Tabelle angelegt die die neuen Daten für die 1:n Verknüpfung
enthalten soll. Anschliessend füge ich Datensatz für Datensatz die benötigten ID's von
der Tabelle Artikel in die neue Tabelle ArtAutor ein.
Die Autorinformation in der Tabelle Artikel bleibt erhalten, sodass mit dem alten
Frontend noch weitergearbeitet werden kann. Ja und das war die ganze Arbeit.
Viel Spass noch beim testen !