Tengo un escenario de diseño de tabla y, como tipo que no es DBA, me gustaría tener opiniones sobre cuál es más escalable.
Digamos que se le pide que registre información sobre casas para un área metropolitana, comenzando con un vecindario pequeño (200 casas) pero eventualmente creciendo a más de 5000000 casas.
Se requiere que almacene la información de base: ID # (Un # de lote único que podemos usar como índice único), Addr, Ciudad, Estado, Código postal. Bien, simple mesa lo manejará.
Pero cada año, se le pedirá que registre información adicional sobre todas las casas, y QUÉ información cambiará cada año. Entonces, por ejemplo, el primer año, se le pide que registre el apellido y los pies cuadrados de los propietarios. El segundo año, se le pide que mantenga el apellido, pero que elimine los pies cuadrados y, en su lugar, comience a recopilar los nombres de los propietarios.
Por último, cada año cambiará el número de columnas adicionales. Podría comenzar con 2 columnas adicionales, luego pasar a 6 el próximo año y luego volver a 2.
Entonces, un enfoque de tabla es tratar de agregar la información personalizada como columnas en las tablas de la casa para que solo haya una tabla.
Pero tengo una situación en la que alguien dispuso las tablas para esto como:
Columnas "Tabla de la casa": ID, Dirección, Ciudad, Estado, Código postal, con una fila 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
Columnas "Tabla de información personalizada": ID, Nombre, Valor, con una tabla similar 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
Por lo tanto, hay varias filas para cada registro de casa individual. Cada año, cuando la información opcional requiere cambios, esta tabla se reconstruye literalmente, por lo que el próximo año podría verse así:
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 acumulas 100,000 filas de casas Y un año hay 10 datos adicionales; la segunda tabla ahora tiene 1,000,000 de filas de información, muchas de las cuales tienen información redundante (descripción). Los requisitos generales de la base de datos son que las personas necesitarán obtener la información de la fila de la casa + los valores de campo personalizados asociados miles de veces por día.
Entonces mi pregunta: ¿sería una práctica mala (u horrible) en su lugar:
A) Diseñe la tabla de la casa con el número máximo de columnas personalizadas (llamado quizás "1" a "10") e inserte esos valores personalizados directamente en las filas de la casa
O
B) Almacene la información personalizada en la tabla de la casa, pero cada año, cuando los requisitos cambien, reconstruya la tabla de la casa con solo el número de columnas necesarias para la información personalizada, con la idea de que los requisitos podrían volverse locos y nunca se sabe cuántos máximos campos opcionales pueden ser solicitados?
Gracias, espero que esto tenga sentido!