Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Tabelas de banco de dados, quanto mais melhor?


O problema aqui é subdigitação . Existem três abordagens básicas para lidar com subtipos.
  1. Coloque cada tipo de registro em uma tabela completamente separada;
  2. Coloque um registro em uma tabela pai e depois um registro em uma tabela de subtipo; e
  3. Coloque todos os registros em uma tabela, com colunas anuláveis ​​para os dados "opcionais" (ou seja, coisas que não se aplicam a esse tipo).

Cada estratégia tem seus méritos.

Por exemplo, (3) é particularmente aplicável se houver pouca ou nenhuma diferença entre os diferentes subtipos. No seu caso, diferentes registros de log têm colunas extras se forem de um tipo específico? Se não o fizerem ou houver alguns casos em que o fizerem, colocá-los todos em uma tabela faz todo o sentido.

(2) é comumente usado para uma mesa de festa. Este é um modelo comum em CRMs que envolve um objeto Parte pai que possui subtipos para Pessoa e Organização (Organização também pode ter subtipos como Empresa, Associação, etc). Pessoa e Organização têm propriedades diferentes (por exemplo, saudação, nomes próprios, data de nascimento, etc. para Pessoa), por isso faz sentido dividir isso em vez de usar colunas anuláveis.

(2) é potencialmente mais eficiente em termos de espaço (embora a sobrecarga de colunas NULL em DBMSs modernos seja muito baixa). O maior problema é que (2) pode ser mais confuso para os desenvolvedores. Você obterá uma situação em que alguém precisa armazenar um campo extra em algum lugar e o colocará em uma coluna vazia para esse tipo simplesmente porque é mais fácil fazer isso do que obter aprovação para os DBAs adicionarem uma coluna (não, não estou brincando ).

(1) é provavelmente o esquema menos usado dos 3 na minha experiência.

Por último, a escalabilidade deve ser considerada e é provavelmente o melhor caso para (1). Em certos pontos, os JOINs não são dimensionados de forma eficaz e você precisará usar algum tipo de esquema de particionamento para reduzir o tamanho das tabelas. (1) é um método de fazer isso (mas um método grosseiro).

Eu não me preocuparia muito com isso, no entanto. Normalmente, você precisará chegar a centenas de milhões ou bilhões de registros antes que isso se torne um problema (a menos que seus registros sejam realmente muito grandes, caso em que acontecerá mais cedo).