DevTrain

Autor: Shinja Strasser

Erweitern einer produktiv-Datenbank von 1:1 zu 1:n

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 XDB

create 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 !


Erfasst am: 14.07.2001 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=487
© Copyright 2003 ppedv AG - http://www.ppedv.de