Pergunta

Existe alguma maneira de usar a herança em banco de dados (Especificamente no SQL Server 2005)?

Suponha que eu tenha poucos campo como CreatedOn, CreatedBy o que eu quero para adicionar em todas as minhas entidades.Eu procurando uma maneira alternativa, em vez de adicionar estes campos de cada tabela.

Foi útil?

Solução

Não há tal coisa como herança entre tabelas no SQL Server 2005, e como observado por outras pessoas, você pode chegar tão longe como obter ajuda de adicionar as colunas necessárias para as tabelas quando você criá-los, mas não será a herança, como você o conhece.

Pense nele mais como um modelo para seus arquivos de código fonte.

Como GateKiller menciona, você pode criar uma tabela que contém dados compartilhados e referenciá-lo com uma chave estrangeira, mas você vai ter de auditoria ganchos, gatilhos, ou fazer a atualização manualmente.

Linha inferior:O trabalho Manual.

Outras dicas

O PostgreSQL possui esse recurso.Basta adicionar este final de sua definição de tabela:

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

A tabela filho vai ter todas as colunas de seu pai, e alterações para a tabela pai vai alterar o filho.Além disso, tudo na tabela filho virá em consultas à tabela principal (por padrão).Infelizmente, os índices de não atravessar o pai/filho de fronteira, o que também significa que você não pode ter certeza que determinadas colunas são exclusivos entre pai e filho.

Até onde eu sei, não é um recurso utilizado com muita frequência.

Você poderia criar um modelo no painel de modelo no Management Studio.E, em seguida, usar esse modelo, a cada vez que você deseja criar uma nova tabela.

Se isto falhar, você pode armazenar o CreatedOn e CreatedBy campos em uma trilha de Auditoria de tabela de referência da tabela original e a identificação.

Na sua falta, fazê-lo manualmente.

Você pode usar uma ferramenta de modelagem de dados, tais como o ER/Studio ou ERWin.Ambas as ferramentas possuem domínio colunas, onde você pode definir um modelo de coluna que você pode aplicar para qualquer tabela.Quando o domínio de alterações, de modo a fazer o associado colunas.ER/Studio também possui gatilho modelos que você pode construir e aplicar para qualquer tabela.Isto é como nós atualizamos nosso LastUpdatedBy e LastUpdatedDate colunas sem ter para construir e manter centenas de trigger scripts.

Se você criar uma tabela de auditoria você gostaria de ter uma linha para cada linha em cada tabela que usa a tabela de auditoria.Que poderia ficar confuso.Na minha opinião, é melhor colocar a auditoria de colunas em cada tabela.Você também pode querer colocar uma coluna de carimbo de hora em todas as suas tabelas.Você nunca sabe quando simultaneidade torna-se um problema.Nossos DB audit colunas que colocamos em cada tabela são:CreatedDt, LastUpdatedBy, LastUpdatedDt e Carimbo de data / hora.

Espero que isso ajude.

Temos uma SProc que adiciona auditoria colunas de uma determinada tabela, e (opcionalmente) cria uma tabela de histórico e disparadores associados para registar as alterações para um valor.Infelizmente, a política da empresa significa que eu não posso compartilhar, mas ele realmente não é difícil de alcançar.

Se você estiver usando o Guid que você poderia criar um CreateHistory tabela com colunas GUID, CreatedOn, CreatedBy.Para preencher a tabela, você ainda teria que criar um gatilho para cada mesa ou o puxador na lógica da aplicação.

Você NÃO deseja usar a herança para fazer isso!Quando a tabela B, C e D herda de Uma tabela, o que significa que, consultando A tabela A dar-lhe os registros de B, C e D.Agora, considere...

EXCLUIR a PARTIR de um;

Em vez de herança, COMO uso de vez...

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

Ramesh - eu gostaria de implementar isso usando o supertipo e o subtipo de relacionamentos no meu E-R modelo.Há alguns físicos diferentes opções que você tem de implementar as relações assim.

Ou mapeamento de herança mapas para uma tabela principal, onde as tabelas pai e filho usar o mesmo identificador.

por exemplo

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)
)

Subobjectos tem uma relação de chave estrangeira para o Objeto.quando você cria um Subobjeto de linha, você deve primeiro criar um Objeto de linha e usar o Id em ambas as linhas,

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top