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 / 70068
Accepted
Joishi Bodio
Joishi Bodio
Asked: 2014-07-10 07:42:10 +0800 CST2014-07-10 07:42:10 +0800 CST 2014-07-10 07:42:10 +0800 CST

Prós e contras da tabela de status mestre versus tabela de status privada?

  • 772

Sou o único DBA em nossa empresa e sou relativamente novo na profissão (tendo agora 2,5 anos de experiência). Os desenvolvedores e eu estamos discutindo sobre como projetar adequadamente o banco de dados para um novo software que está sendo desenvolvido. Eles desenvolvem seus aplicativos em módulos e acreditam que ter uma tabela de status privada para cada módulo é melhor, enquanto acredito que ter uma tabela para conter todos os estados gerados internamente (e possivelmente tabelas adicionais para dar algum significado a esses estados) seria melhor. O código de amostra abaixo está escrito em postgresql, pois é o que usamos.

Minha abordagem:

CREATE TABLE status (
  status_id SERIAL PRIMARY KEY,
  status_code VARCHAR(3) UNIQUE NOT NULL, -- short description
  status_description VARCHAR(50) UNIQUE NOT NULL -- long description
);

CREATE TABLE member_status (
  status_id INT PRIMARY KEY REFERENCES status (status_id)
);

A abordagem deles:

CREATE TABLE member_status (
  status_id SERIAL PRIMARY KEY,
  status_code VARCHAR(3) UNIQUE NOT NULL, -- short description
  status_description VARCHAR(50) UNIQUE NOT NULL -- long description
);
-- rinse and repeat for every object that may need a status

Eles só veem "problemas" com minha abordagem (que ainda precisam ser claramente articulados) e, embora eu não veja problemas com a abordagem deles, acredito que não seja o melhor design.

Qualquer contribuição sobre qual design é melhor e PORQUÊ seria apreciada.

database-design
  • 1 1 respostas
  • 536 Views

1 respostas

  • Voted
  1. Best Answer
    Disillusioned
    2014-07-10T08:52:19+08:002014-07-10T08:52:19+08:00

    O principal problema com sua abordagem ocorre quando você deseja manter a integridade referencial da tabela de status.

    Suponha que você tenha uma tabela de membros:

    CREATE TABLE member (
      member_id SERIAL PRIMARY KEY,
      status_id int NOT NULL,
      ...
    );
    

    Agora, se você deseja impor integridade referencial para garantir que cada membro tenha um status válido, não pode. Isso ocorre porque apenas um subconjunto das linhas de status se aplica aos membros. Como resultado, um membro pode receber um purchase_order_statuse o RI ainda será aprovado.

    EDIT2

    Em um comentário, você esclareceu que em sua solução, o membro teria RI para a member_statustabela de coluna única. Isso sugere que seu design pode ter um grande número de tabelas de coluna única, apenas para controlar a integridade referencial. Agora, sempre que você adicionar um novo status, precisará adicioná-lo a 2 tabelas.

    Há outro problema com sua master_statusmesa.

    status_codeé único. O que significa que purchase_ordere sales_ordernão pode usar os mesmos códigos. Esta parece ser uma restrição desnecessariamente severa. No entanto, descartar a restrição exclusiva corre o risco de duplicar os códigos dentro de uma categoria.

    Portanto, a próxima coisa que você deve considerar é adicionar um status_typee impor a restrição exclusiva no tipo e no código. Portanto, seu status_type tenta corrigir o problema subjacente dividindo artificialmente a tabela principal em várias tabelas.

    Basicamente, o problema se resume a: você está tentando consolidar vários conjuntos distintos de dados em uma única tabela porque há uma semelhança no fato de que algumas de suas colunas se sobrepõem.


    Joe Celko escreveu um artigo bastante aprofundado sobre Lookup Tables in SQL .


    EDIT Pensando bem, talvez sua abordagem não seja muito parecida com "One True Lookup Table" porque você reconhece a necessidade de tabelas adicionais onde mais detalhes são necessários. A questão do RI ainda permanece.

    • 0

relate perguntas

  • Os índices filtrados podem ajudar a melhorar as consultas baseadas em uma hora inserida ou isso deve ser evitado?

  • Qual é a diferença entre os tipos de dados MySQL VARCHAR e TEXT?

  • É melhor armazenar os valores calculados ou recalculá-los a pedido? [duplicado]

  • Armazenar vs calcular valores agregados

  • Quais são algumas maneiras de implementar um relacionamento muitos-para-muitos em um data warehouse?

Sidebar

Stats

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

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

    • 4 respostas
  • Marko Smith

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

    • 10 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
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +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

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