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.
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.
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.
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.
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.
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.
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%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.
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.
Tags und Links sql database inheritance sql-server-2005