Question

Existe-t-il un moyen d'utiliser l'héritage dans la base de données (en particulier dans SQL Server 2005) ?

Supposons que j'ai peu de champs comme Créé sur, Créé par que je souhaite ajouter sur toutes mes entités.Je cherche une alternative au lieu d'ajouter ces champs à chaque table.

Était-ce utile?

La solution

L'héritage entre les tables n'existe pas dans SQL Server 2005, et comme l'ont noté les autres, vous pouvez aller jusqu'à obtenir de l'aide pour ajouter les colonnes nécessaires aux tables lorsque vous les créez, mais ce ne sera pas un héritage comme vous le souhaitez. sachez le.

Considérez-le plutôt comme un modèle pour vos fichiers de code source.

Comme GateKiller le mentionne, vous pouvez créer une table contenant les données partagées et la référencer avec une clé étrangère, mais vous devrez soit disposer de crochets d'audit, de déclencheurs, soit effectuer la mise à jour manuellement.

Conclusion :Travail manuel.

Autres conseils

PostgreSQL a cette fonctionnalité.Ajoutez simplement ceci à la fin de la définition de votre table :

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

La table enfant aura toutes les colonnes de son parent et les modifications apportées à la table parent modifieront l'enfant.De plus, tout ce qui se trouve dans la table enfant apparaîtra dans les requêtes adressées à la table parent (par défaut).Malheureusement, les indices ne traversent pas la frontière parent/enfant, ce qui signifie également que vous ne pouvez pas garantir que certaines colonnes sont uniques à la fois entre le parent et l'enfant.

Pour autant que je sache, ce n'est pas une fonctionnalité très souvent utilisée.

Vous pouvez créer un modèle dans le volet modèle de Management Studio.Et puis utilisez ce modèle chaque fois que vous souhaitez créer un nouveau tableau.

À défaut, vous pouvez stocker les champs CreatedOn et CreatedBy dans une table de piste d'audit faisant référence à la table et à l'identifiant d'origine.

A défaut, faites-le manuellement.

Vous pouvez utiliser un outil de modélisation de données tel que ER/Studio ou ERWin.Les deux outils disposent de colonnes de domaine dans lesquelles vous pouvez définir un modèle de colonne que vous pouvez appliquer à n'importe quelle table.Lorsque le domaine change, les colonnes associées changent également.ER/Studio propose également des modèles de déclencheurs que vous pouvez créer et appliquer à n'importe quelle table.C'est ainsi que nous mettons à jour nos colonnes LastUpdatedBy et LastUpdatedDate sans avoir à créer et à maintenir des centaines de scripts de déclenchement.

Si vous créez une table d'audit, vous aurez une ligne pour chaque ligne de chaque table utilisant la table d'audit.Cela pourrait devenir compliqué.À mon avis, il vaut mieux mettre les colonnes d'audit dans chaque tableau.Vous souhaiterez peut-être également mettre une colonne d'horodatage dans toutes vos tables.On ne sait jamais quand la concurrence devient un problème.Nos colonnes d'audit de base de données que nous mettons dans chaque tableau sont :CreatedDt, LastUpdatedBy, LastUpdatedDt et Timestamp.

J'espère que cela t'aides.

Nous avons un SProc qui ajoute des colonnes d'audit à une table donnée et (éventuellement) crée une table d'historique et des déclencheurs associés pour suivre les modifications apportées à une valeur.Malheureusement, la politique de l'entreprise m'empêche de partager, mais ce n'est vraiment pas difficile à réaliser.

Si vous utilisez des GUID, vous pouvez créer une table CreateHistory avec les colonnes GUID, CreatedOn, CreatedBy.Pour remplir la table, vous devrez toujours créer un déclencheur pour chaque table ou le gérer dans la logique de l'application.

Vous ne voulez PAS utiliser l'héritage pour faire cela !Lorsque les tables B, C et D héritent de la table A, cela signifie que l'interrogation de la table A vous donnera les enregistrements de B, C et D.Considérez maintenant...

SUPPRIMER DE a ;

Au lieu de l'héritage, utilisez plutôt LIKE...

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

Ramesh - J'implémenterais cela en utilisant des relations de supertype et de sous-type dans mon modèle E-R.Vous disposez également de plusieurs options physiques différentes pour mettre en œuvre les relations.

dans le mappage O-R, l'héritage est mappé à une table parent où les tables parent et enfant utilisent le même identifiant

Par exemple

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 a une relation de clé étrangère avec Object.lorsque vous créez une ligne de sous-objet, vous devez d'abord créer une ligne d'objet et utiliser l'ID dans les deux lignes

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top