Eu sou um desenvolvedor entrando no mundo do banco de dados, então tenha paciência comigo, por favor.
Estou criando um banco de dados de contratos com tabelas separadas para vários tipos de contratos.
Eu tenho 5 tabelas, mas gostaria de compartilhar um campo 'Identidade' comum entre elas, para que haja um número de contrato exclusivo para qualquer contrato, independentemente do tipo.
Qual é a maneira recomendada de fazer isso? Algo que não vai complicar transações crud simples?
Meu aplicativo usará um servidor Sql Server 2008 R2 ... o aplicativo em si é Silverlight 4 usando serviços WCF Ria para transações CRUD.
Uma ideia de esquema seria ótimo, um tutorial de ideias e tecnologias semelhantes seria ainda melhor.
Obrigado por olhar Roberto
Até que o SQL Server suporte sequências (próxima versão "Denali"), você terá que ter uma tabela comum.
No entanto, se eu entendi, acho que você está olhando para o padrão subtipo/supertipo. Uma sequência seria legal, mas se você projetasse usando, digamos, Object Role Modeling , geraria esse padrão/esquema
Basicamente, você tem uma tabela "Contrato" comum:
Notas:
ContractID
dar um valor únicoContractType
define seus "vários tipos". Vamos para Tom, Dick e Harry como tiposContractID, ContractType
(esta é uma "super chave")InsertedDateTime
,CounterParty
etc são atributos comunsEntão você tem sub-tabelas com atributos específicos para cada tipo de contrato
ContractID, ContractType, TomAttrib1, TomAttrib2, ..., TomAttribn
ContractID, ContractType, DickAttrib1, DickAttrib2
ContractID, ContractType, HarryAttrib1, HarryAttrib2, HarryAttrib3
Notas:
ContractID, ContractType
são o PK e o FK.ContractType
tem restrição CHECK para restringir a Tom ou Dick ou HarryFazer isso requer ter uma única tabela na qual você insere novas linhas e obtém os valores de lá, ou você escreve seu próprio processo de sequência até poder atualizar para o SQL Server "Denali", que oferece suporte imediato.
Eu prefiro tabela separada que armazena o último identificador exclusivo para algum escopo:
Uma identidade não restaura seu valor após o rollback da transação. A mesma situação no Oracle (sequências que conheço) e a mesma será no SQL Server "Denali" para sequências (acho).