Domanda

Esiste un modo per utilizzare l'ereditarietà nel database (in particolare in SQL Server 2005)?

Supponiamo di avere pochi campi come Creato, Creato da che voglio aggiungere a tutte le mie entità.Sto cercando un modo alternativo invece di aggiungere questi campi a ogni tabella.

È stato utile?

Soluzione

Non esiste l'ereditarietà tra le tabelle in SQL Server 2005 e, come notato dagli altri, puoi arrivare fino a ottenere aiuto per aggiungere le colonne necessarie alle tabelle quando le crei, ma non sarà ereditarietà come tu lo so.

Pensalo più come un modello per i tuoi file di codice sorgente.

Come menzionato da GateKiller, puoi creare una tabella contenente i dati condivisi e farvi riferimento con una chiave esterna, ma dovrai disporre di hook di controllo, trigger o eseguire l'aggiornamento manualmente.

Linea di fondo:Lavoro manuale.

Altri suggerimenti

PostgreSQL ha questa funzionalità.Basta aggiungere questo alla fine della definizione della tabella:

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

La tabella figlia avrà tutte le colonne della tabella genitore e le modifiche alla tabella genitore cambieranno la tabella figlia.Inoltre, tutto nella tabella figlia verrà visualizzato nelle query alla tabella genitore (per impostazione predefinita).Sfortunatamente gli indici non oltrepassano il confine genitore/figlio, il che significa anche che non è possibile garantire che determinate colonne siano univoche sia nel genitore che nel figlio.

Per quanto ne so, non è una funzionalità utilizzata molto spesso.

È possibile creare un modello nel riquadro dei modelli in Management Studio.E poi usa quel modello ogni volta che vuoi creare una nuova tabella.

In caso contrario, è possibile memorizzare i campi CreatedOn e CreatedBy in una tabella di audit trail che fa riferimento alla tabella e all'ID originali.

In caso contrario, fallo manualmente.

Potresti utilizzare uno strumento di modellazione dei dati come ER/Studio o ERWin.Entrambi gli strumenti dispongono di colonne di dominio in cui puoi definire un modello di colonna che puoi applicare a qualsiasi tabella.Quando il dominio cambia, cambiano anche le colonne associate.ER/Studio dispone inoltre di modelli di trigger che è possibile creare e applicare a qualsiasi tabella.Questo è il modo in cui aggiorniamo le nostre colonne LastUpdatedBy e LastUpdatedDate senza dover creare e gestire centinaia di script di trigger.

Se crei una tabella di controllo, avrai una riga per ogni riga in ogni tabella che utilizza la tabella di controllo.Potrebbe diventare complicato.A mio parere, è meglio inserire le colonne di controllo in ogni tabella.Potresti anche voler inserire una colonna timestamp in tutte le tue tabelle.Non si sa mai quando la concorrenza diventa un problema.Le colonne di controllo del DB che inseriamo in ogni tabella sono:CreatedDt, LastUpdatedBy, LastUpdatedDt e Timestamp.

Spero che questo ti aiuti.

Abbiamo un SProc che aggiunge colonne di controllo a una determinata tabella e (facoltativamente) crea una tabella di cronologia e trigger associati per tenere traccia delle modifiche a un valore.Sfortunatamente, la politica aziendale significa che non posso condividerlo, ma in realtà non è difficile da raggiungere.

Se utilizzi i GUID puoi creare una tabella CreateHistory con le colonne GUID, CreatedOn, CreatedBy.Per popolare la tabella dovresti comunque creare un trigger per ogni tabella o gestirlo nella logica dell'applicazione.

NON vuoi usare l'ereditarietà per fare questo!Quando la tabella B, C e D eredita dalla tabella A, ciò significa che l'interrogazione della tabella A ti fornirà record da B, C e D.Ora considera...

ELIMINA DA a;

Invece dell'ereditarietà, usa invece LIKE...

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

Ramesh: lo implementerei utilizzando le relazioni di supertipo e sottotipo nel mio modello E-R.Ci sono anche alcune diverse opzioni fisiche a disposizione per implementare le relazioni.

nella mappatura O-R, l'ereditarietà viene mappata a una tabella padre in cui le tabelle padre e figlio utilizzano lo stesso identificatore

Per esempio

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 ha una relazione di chiave esterna con Object.quando crei una riga SubObject, devi prima creare una riga Object e utilizzare l'Id in entrambe le righe

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top