sql >> Base de Datos >  >> RDS >> Mysql

¿Es práctico normalizar dinámicamente una tabla?

Depende un poco de su uso. El enfoque normalizado (parque es una mesa) facilitará las siguientes consultas:

  • ¿Cuántos avistamientos de aves ha habido para cada parque?
  • En qué parque es más probable que veas pájaros XYZ
  • Probablemente haya bastantes consultas más como esta

Pero sí, te encuentras con algunos problemas complicados. El patrón "si el parque XYZ no existe, insértelo en la tabla de parques" sufre una condición de carrera con la que tendrá que lidiar.

Ahora, ¿qué tal algunos argumentos en contra de la normalización aquí? La mayoría de las bases de datos de clientes probablemente almacenan mi dirección de calle como "123 Foo Street", sin normalizar dinámicamente el nombre de la calle (podríamos tener una tabla de calles y poner "Foo Street" allí, luego referenciar de otras tablas. ¿Por qué menciono esto? Bueno, para mostrar que incluso los tipos que odian los datos repetidos probablemente reconocerán que hay una línea que no necesariamente tienes que cruzar.

Otro ejemplo tonto sería que podríamos compartir apellidos. ¿Realmente necesitamos una tabla para apellidos únicos y luego una clave externa de otras tablas? Puede haber algunas aplicaciones en las que esto sea útil, pero para el 99% de las aplicaciones, esto va demasiado lejos. Es solo más trabajo y menos rendimiento por poca o ninguna ganancia.

Así que consideraría cómo quiero poder consultar los datos de la tabla. Honestamente, en este caso, probablemente haría una mesa separada para los parques. Pero en otros casos he optado por no hacerlo.

Esos son mis dos centavos, un centavo después de impuestos.