Frage

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

Angenommen, ich habe nur wenige feldähnliche Erstellt am, Erstellt von was ich allen meinen Entitäten hinzufügen möchte.Ich suche nach einer Alternative, anstatt diese Felder zu jeder Tabelle hinzuzufügen.

War es hilfreich?

Lösung

So etwas wie eine Vererbung zwischen Tabellen gibt es in SQL Server 2005 nicht, und wie von anderen angemerkt, können Sie beim Erstellen der Tabellen beim Hinzufügen der erforderlichen Spalten zu den Tabellen Hilfe erhalten, aber es handelt sich dabei nicht um eine Vererbung es wissen.

Betrachten Sie es eher als eine Vorlage für Ihre Quellcodedateien.

Wie GateKiller erwähnt, können Sie eine Tabelle mit den gemeinsam genutzten Daten erstellen und mit einem Fremdschlüssel darauf verweisen. Sie müssen jedoch entweder über Audit-Hooks oder Trigger verfügen oder die Aktualisierung manuell durchführen.

Endeffekt:Handarbeit.

Andere Tipps

PostgreSQL verfügt über diese Funktion.Fügen Sie dies einfach am Ende Ihrer Tabellendefinition hinzu:

INHERITS FROM (tablename[, othertable...])

Die untergeordnete Tabelle enthält alle Spalten der übergeordneten Tabelle, und Änderungen an der übergeordneten Tabelle ändern das untergeordnete Element.Außerdem wird alles in der untergeordneten Tabelle in Abfragen an die übergeordnete Tabelle angezeigt (standardmäßig).Leider überschreiten Indizes nicht die Grenze zwischen übergeordnetem und untergeordnetem Element, was auch bedeutet, dass Sie nicht sicherstellen können, dass bestimmte Spalten sowohl im übergeordneten als auch im untergeordneten Element eindeutig sind.

Soweit ich weiß, wird diese Funktion nicht sehr häufig verwendet.

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

Andernfalls können Sie die Felder „CreatedOn“ und „CreatedBy“ in einer Audit-Trail-Tabelle speichern, die auf die ursprüngliche Tabelle und ID verweist.

Wenn das nicht gelingt, machen Sie es manuell.

Sie könnten ein Datenmodellierungstool 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 Trigger-Vorlagen, die Sie erstellen und auf jede Tabelle anwenden können.Auf diese Weise aktualisieren wir unsere Spalten „LastUpdatedBy“ und „LastUpdatedDate“, ohne Hunderte von Triggerskripten erstellen und verwalten zu müssen.

Wenn Sie eine Audit-Tabelle erstellen, verfügen Sie über eine Zeile für jede Zeile in jeder Tabelle, die die Audit-Tabelle verwendet.Das könnte chaotisch werden.Meiner Meinung nach ist es besser, die Prüfspalten in jede Tabelle einzufügen.Möglicherweise möchten Sie auch in alle Ihre Tabellen eine Zeitstempelspalte einfügen.Man weiß nie, wann Parallelität zum Problem wird.Unsere DB-Prüfspalten, die wir in jede Tabelle einfügen, sind:CreatedDt, LastUpdatedBy, LastUpdatedDt und Timestamp.

Hoffe das hilft.

Wir haben einen SProc, der Prüfspalten zu einer bestimmten Tabelle hinzufügt und (optional) eine Verlaufstabelle und zugehörige Trigger erstellt, um Änderungen an einem Wert zu verfolgen.Leider kann ich aufgrund der Unternehmensrichtlinien nichts weitergeben, aber es ist wirklich nicht schwer, dies zu erreichen.

Wenn Sie GUIDs verwenden, können Sie eine CreateHistory-Tabelle mit den Spalten GUID, CreatedOn und CreatedBy erstellen.Um die Tabelle zu füllen, müssten Sie immer noch für jede Tabelle einen Trigger erstellen oder ihn in der Anwendungslogik behandeln.

Sie möchten dazu KEINE Vererbung verwenden!Wenn Tabelle B, C und D von Tabelle A erben, bedeutet das, dass Sie bei der Abfrage von Tabelle A Datensätze von B, C und D erhalten.Bedenken Sie nun...

LÖSCHEN AUS a;

Verwenden Sie anstelle von Vererbung stattdessen LIKE ...

CREATE TABLE blah (
    blah_id     serial       PRIMARY KEY
    , something text         NOT NULL
    , LIKE template_table    INCLUDING DEFALUTS
);

Ramesh – Ich würde dies mithilfe von Supertyp- und Subtyp-Beziehungen in meinem E-R-Modell implementieren.Es gibt auch verschiedene physische Möglichkeiten, die Beziehungen umzusetzen.

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

Zum Beispiel

create table Object (
    Id int NOT NULL --primary key, auto-increment
    Name varchar(32)
)
create table SubObject (
    Id int NOT NULL  --primary key and also foreign key to Object
    Description varchar(32)
)

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top