AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 4105
Accepted
MongooseNX
MongooseNX
Asked: 2011-07-26 18:59:29 +0800 CST2011-07-26 18:59:29 +0800 CST 2011-07-26 18:59:29 +0800 CST

Esquema de banco de dados com um campo de identidade compartilhado

  • 772

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

sql-server-2008 identity
  • 3 3 respostas
  • 596 Views

3 respostas

  • Voted
  1. Best Answer
    gbn
    2011-07-27T00:58:00+08:002011-07-27T00:58:00+08:00

    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:

    ContractID, PK, UQ1 (Identity)
    ContractType, FK, UQ1
    InsertedDateTime
    UpdatedDateTime
    CounterParty
    

    Notas:

    • o PK é ContractIDdar um valor único
    • ContractTypedefine seus "vários tipos". Vamos para Tom, Dick e Harry como tipos
    • A chave única UQ1 está em ambos ContractID, ContractType(esta é uma "super chave")
    • InsertedDateTime, CounterPartyetc são atributos comuns

    Então você tem sub-tabelas com atributos específicos para cada tipo de contrato

    • ContratoTom:ContractID, ContractType, TomAttrib1, TomAttrib2, ..., TomAttribn
    • ContratoDick:ContractID, ContractType, DickAttrib1, DickAttrib2
    • ContratoHarry:ContractID, ContractType, HarryAttrib1, HarryAttrib2, HarryAttrib3

    Notas:

    • ContractID, ContractTypesão o PK e o FK.
    • ContractTypetem restrição CHECK para restringir a Tom ou Dick ou Harry
    • 6
  2. mrdenny
    2011-07-26T22:48:10+08:002011-07-26T22:48:10+08:00

    Fazer 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.

    • 2
  3. garik
    2011-07-26T23:58:59+08:002011-07-26T23:58:59+08:00

    Eu prefiro tabela separada que armazena o último identificador exclusivo para algum escopo:

    SCOPE_NAME
    START_VALUE
    END_VALUE
    CURRENT_VALUE
    

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

    • 1

relate perguntas

  • Melhores práticas para conectar bancos de dados que estão em diferentes regiões geográficas

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Quanto "Padding" coloco em meus índices?

  • Existe um processo do tipo "práticas recomendadas" para os desenvolvedores seguirem para alterações no banco de dados?

  • Downgrade do SQL Server 2008 para 2005

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve