Vererbung in der Datenbank?

8

Gibt es eine Möglichkeit, Vererbung in der Datenbank (speziell in SQL Server 2005) zu verwenden?

Angenommen, ich habe wenige Felder wie CreatedOn , CreatedBy , die ich allen meinen Entitäten hinzufügen möchte. Ich suche nach einem alternativen Weg, anstatt diese Felder zu jeder Tabelle hinzuzufügen.

    
Ramesh Soni 08.08.2008, 10:41
quelle

9 Antworten

3

Es gibt keine Vererbung zwischen Tabellen in SQL Server 2005, und wie von den anderen angegeben, können Sie so weit kommen, dass Sie Hilfe erhalten, wenn Sie die Tabellen zu den erforderlichen Spalten hinzufügen, aber das wird nicht der Fall sein Vererbung, wie Sie es kennen.

Denken Sie eher an eine Vorlage für Ihre Quellcodedateien.

Wie GateKiller erwähnt, können Sie eine Tabelle erstellen, die die gemeinsamen Daten enthält, und sie mit einem Fremdschlüssel referenzieren, aber Sie müssen entweder Audit-Hooks, Trigger oder das Update manuell durchführen.

Untere Zeile: Manuelle Arbeit.

    
Lasse Vågsæther Karlsen 08.08.2008, 11:08
quelle
3

PostgreSQL hat diese Funktion. Füge dies einfach an das Ende deiner Tabellendefinition an:

%Vor%

Die untergeordnete Tabelle enthält alle Spalten ihres übergeordneten Elements, und Änderungen an der übergeordneten Tabelle ändern das untergeordnete Element. Außerdem wird alles in der untergeordneten Tabelle in Abfragen an die übergeordnete Tabelle (standardmäßig) angezeigt. Leider kreuzen Indizes den Eltern / Kind-Rahmen nicht an, was auch bedeutet, dass Sie nicht sicherstellen können, dass bestimmte Spalten sowohl im Eltern- als auch im Kindbereich eindeutig sind.

Soweit ich weiß, wird es nicht oft benutzt.

    
Neall 08.08.2008 10:55
quelle
1

Sie können eine Vorlage im Vorlagenbereich von Management Studio erstellen. Verwenden Sie diese Vorlage dann jedes Mal, wenn Sie eine neue Tabelle erstellen möchten.

Wenn Sie dies nicht tun, können Sie die Felder CreatedOn und CreatedBy in einer Audit-Nachschlagetabelle speichern, die auf die ursprüngliche Tabelle und ID verweist.

Wenn das nicht klappt, machen Sie es manuell.

    
GateKiller 08.08.2008 10:43
quelle
0

Sie könnten ein Datenmodellierungswerkzeug wie ER / Studio oder ERWin verwenden. Beide Tools verfügen über Domänenspalten, in denen Sie eine Spaltenvorlage definieren können, die Sie auf jede Tabelle anwenden können. Wenn sich die Domäne ändert, ändern sich auch die zugehörigen Spalten. ER / Studio verfügt außerdem über Auslöservorlagen, die Sie erstellen und auf jede Tabelle anwenden können. So aktualisieren wir unsere Spalten LastUpdatedBy und LastUpdatedDate, ohne Hunderte von Triggerscripts erstellen und warten zu müssen.

Wenn Sie eine Audit-Tabelle erstellen, hätten Sie für jede Zeile in jeder Tabelle, die die Audit-Tabelle verwendet, eine Zeile. Das könnte chaotisch werden. Meiner Meinung nach ist es besser, die Audit-Spalten in jede Tabelle zu schreiben. Sie können auch eine Zeitstempelspalte in alle Ihre Tabellen einfügen. Sie wissen nie, wenn Nebenläufigkeit ein Problem wird. Unsere DB-Prüfspalten, die wir in jede Tabelle eingeben, sind: CreatedDt, LastUpdatedBy, LastUpdatedDt und Timestamp.

Hoffe, das hilft.

    
Jorriss 08.08.2008 12:00
quelle
0

Wir haben einen SProc, der einer gegebenen Tabelle Überwachungsspalten hinzufügt und (optional) eine Protokolltabelle und zugehörige Auslöser erstellt, um Änderungen an einem Wert zu verfolgen. Leider bedeutet Firmenpolitik, dass ich nicht teilen kann, aber es ist wirklich nicht schwer zu erreichen.

    
ZombieSheep 08.08.2008 14:59
quelle
0

Wenn Sie GUIDs verwenden, können Sie eine CreateHistory-Tabelle mit den Spalten GUID, CreatedOn, CreatedBy erstellen. Zum Auffüllen der Tabelle müssen Sie immer noch einen Trigger für jede Tabelle erstellen oder in der Anwendungslogik behandeln.

    
Rowan 20.08.2008 12:23
quelle
0

Sie möchten die Vererbung NICHT dafür verwenden! Wenn die Tabellen B, C und D von Tabelle A erben, bedeutet dies, dass die Abfrage von Tabelle A Ihnen Datensätze von B, C und D liefert. Betrachten Sie nun ...

LÖSCHEN VON a;

Anstelle der Vererbung verwenden Sie stattdessen LIKE ...

%Vor%     
decibel 16.09.2008 05:48
quelle
0

Ramesh - Ich würde dies mithilfe von Supertyp- und Subtyp-Beziehungen in meinem E-R-Modell implementieren. Es gibt ein paar verschiedene physikalische Optionen, die Sie haben, um die Beziehungen zu implementieren.

    
Mike McAllister 17.09.2008 19:25
quelle
0

Bei der O-R-Zuordnung wird die Vererbung einer übergeordneten Tabelle zugeordnet, in der die übergeordneten und untergeordneten Tabellen den gleichen Bezeichner verwenden

zum Beispiel

%Vor%

SubObject hat eine Fremdschlüsselbeziehung zu Object. Wenn Sie eine SubObject-Zeile erstellen, müssen Sie zuerst eine Object-Zeile erstellen und die ID in beiden Zeilen verwenden.

    
Steven A. Lowe 17.09.2008 19:48
quelle