A menudo me pregunto si estoy tomando el enfoque correcto al tratar de planificar expansibilidad futura al crear bases de datos y relaciones.¿En qué punto la normalización de datos se vuelve absurda?
que tienen la siguiente situación:
Tengo una tabla
Donor
y una mesaRecipient
. Ambas tablas comparten información común comofirst_name
,last_name
,email_address
,date_of_birth
, etc. Ambas parecen, si perdonan mi lenguaje orientado a objetos, comparten un tipo abstracto común dePerson
. Es posible que alguien que se encuentra en un puntoRecipient
más tarde se convierta enDonor
mediante una donación, por lo que es importante que la información no se duplique en las tablas. ¿Debo optar por un patrón de herencia, o debo simplemente clave externaDonor
syRecipient
s a una tablaPerson
?Inicialmente, estaba pensando simplemente mapear propiedades como
email_address
y las propiedades de la calle directamente en las cosas que las necesitan, pero luego puede surgir la posibilidad de que una persona tenga múltiples direcciones de correo electrónico o correo (es decir, trabajo, etc.). Lo que esto significa es que tenemos un modelo algo como esto:create table person(id int primary key auto increment, ..., default_email_address); create table email_address(id int primary key auto increment, email varchar(255), name varchar(255), is_default bool, person_id int);
Esto hace las cosas un poco complicado, como se puede imaginar. El campo
name
también incluye una lista de valores predeterminados y también permite entradas personalizadas. No puedo simplemente convertirlo en un campo de enumeración, porque existe la posibilidad de que alguien tenga que enviar un montón de correos electrónicos que podrían ser diferentes ... (este es el punto en el que grito "¿ES AÚN MÁS VALOR? !?!?" y se sienten frustrados con el proyecto)
Creo que lo que realmente se reduce a lo siguiente: ¿en qué momento la normalización de datos se convierten en ridículos? Mi objetivo aquí es crear un modelo de datos realmente bueno compatible con el futuro como sea posible que no me molestaré por crear más adelante.
En el # 2, ¿cuál sería la alternativa a la normalización de datos? Es casi seguro que no quiere valores múltiples para un solo campo en una fila, por lo que no veo una alternativa para dividir en otra tabla. –