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 / 6519
Accepted
Ezi
Ezi
Asked: 2011-10-05 17:51:55 +0800 CST2011-10-05 17:51:55 +0800 CST 2011-10-05 17:51:55 +0800 CST

Dois relacionamentos para a mesma tabela

  • 772

Eu tenho uma tabela de transações, cada transação tem 5-6 contatos envolvidos. cada contato tem os mesmos campos como nome, endereço, celular, e-mail etc.

Então, a melhor coisa que eu acho é usar a mesma tabela de contato e relacioná-la 5 vezes com a tabela de transações. Portanto, não preciso fazer o mesmo tipo de tabela 5 vezes.

O problema começa quando eu me conecto com a entidade-framework, isso leva apenas uma relação.

Minha pergunta é se devo fazer 6 cópias de contato para cada tipo de contato ou seria melhor com 6 tabelas de junção (uma tabela com apenas os 2 id's para que eu pudesse fazer uma junção)?

Acho que é um problema muito comum, mas não consegui encontrar informações claras sobre qual é a melhor maneira.

EDITAR:Amostra de Tabelas

sql-server relational-theory
  • 2 2 respostas
  • 7633 Views

2 respostas

  • Voted
  1. Best Answer
    Wil
    2011-10-05T17:58:53+08:002011-10-05T17:58:53+08:00

    O melhor é normalizar as tabelas. Crie uma tabela contact_type com um registro para cada tipo de contato. Em seguida, crie uma tabela de junção contact_type_xref que contém o identificador da tabela contact e o identificador da tabela contact_type. Em seguida, carregue os tipos de contato associados a cada contato em contact_type_xref e remova os registros de contato duplicados de contato. Veja um exemplo: Exemplo de Esquema. Depois de corrigir o design do banco de dados, você pode resolver o problema da estrutura da entidade (que provavelmente desaparecerá).

    • 6
  2. Michael Green
    2014-06-27T03:32:57+08:002014-06-27T03:32:57+08:00

    Em primeiro lugar, é um pouco de estrutura de lixo que não reconhece vários relacionamentos entre tipos de entidade!

    Se você tiver tantas chaves estrangeiras, é provável que tenha mais (ou menos) no futuro. Os detalhes da solução @Wil permitirão que você consiga isso sem alterações de esquema.

    Uma solução alternativa que pode enganar sua estrutura seria definir exibições no banco de dados para cada um dos seus tipos de contato e definir o relacionamento da estrutura da transação para a exibição. Por exemplo

    create view Manufacture as
    select
        ContactID as ManufactureID,
        FirstName,
        LastName,
        ...etc.
    from Contacts
    

    Pode ou não funcionar, dependendo de como sua estrutura interage com o banco de dados.

    • 1

relate perguntas

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

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

  • Como estruturar um modelo para representar de forma adequada e eficiente dados em forma de árvore em bancos de dados relacionais?

  • Como determinar se um Índice é necessário ou necessário

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