Eu tenho um cenário de design de tabela e, como um tipo não DBA, gostaria de opiniões sobre qual é mais escalável.
Digamos que você seja solicitado a registrar informações sobre casas em uma área metropolitana, começando com um pequeno bairro (200 casas), mas eventualmente aumentando para 5000000+ casas.
Você precisa armazenar informações de base: ID # (um lote único # que podemos usar como índice exclusivo), Endereço, Cidade, Estado, CEP. Mesa fina e simples vai lidar com isso.
Mas a cada ano, você será solicitado a registrar informações extras sobre todas as casas - e O QUE mudará a cada ano. Por exemplo, no primeiro ano, você deve registrar o sobrenome do proprietário e a metragem quadrada. No segundo ano, você será solicitado a manter o sobrenome, mas despeje a metragem quadrada e comece a coletar os nomes dos proprietários.
Por fim - a cada ano, o número de colunas extras será alterado. Pode começar com 2 colunas extras, depois passar para 6 no próximo ano e depois voltar para 2.
Portanto, uma abordagem de tabela é tentar adicionar as informações personalizadas como colunas nas tabelas da casa, para que haja apenas uma tabela.
Mas eu tenho uma situação em que alguém colocou as tabelas para isso como:
Colunas "Tabela da casa": ID, Endereço, Cidade, Estado, CEP - com uma linha por casa
ID Addr City State Zip
-------------------------------------------
1 10 Maple Street Boston MA 11203
2 144 South Street Chelmsford MA 11304
3 1 Main Avenue Lowell MA 11280
Colunas "Tabela de informações personalizadas": ID, Nome, Valor - com a tabela semelhante a:
ID Name Value
1 Last Name Smith
2 Last Name Harrison
3 Last Name Markey
1 Square Footage 1200
2 Square Footage 1930
3 Square Footage
Portanto, existem várias linhas para cada registro individual da casa. A cada ano, quando as informações opcionais necessárias são alteradas, essa tabela é literalmente reconstruída; portanto, no próximo ano, ela poderá se parecer com:
1 Last Name Smith
2 Last Name Harrison
3 Last Name Markey
1 First Name John
2 First Name Harry
3 First Name Jim
Eventualmente, você acumula 100.000 linhas de casas E, em um ano, há 10 informações extras; a segunda tabela agora é de 1.000.000 de linhas de informações, muitas das quais com informações redundantes (de descrição). Os requisitos gerais do banco de dados são que as pessoas precisarão obter as informações da linha da casa + os valores de campos personalizados associados milhares de vezes por dia.
Então, minha pergunta: seria uma prática ruim (ou horrível) substituir:
A) Coloque a tabela da casa com palpites no máximo de colunas personalizadas (talvez chamadas de "1" a "10") e insira esses valores personalizados diretamente nas linhas da casa
OU
B) Armazene as informações personalizadas na tabela da empresa, mas a cada ano, quando os requisitos forem alterados, reconstrua a tabela da empresa apenas com o número de colunas necessárias para obter informações personalizadas, com a ideia de que os requisitos podem ficar loucos e você nunca sabe quantos campos opcionais podem ser solicitados?
Obrigado, espero que isso faça sentido!