Así que he estado trabajando en este proyecto en el trabajo donde estoy codificando un sitio web php que interactúa con una base de datos que no tengo control. La base de datos fue "diseñada" por un compañero de trabajo que ha estado con la compañía muchos años más que yo; así que al final las decisiones se dejan para que decidan.¿Cómo convencer a alguien de normalizar una base de datos?
Cuando me subieron por primera vez a este proyecto, fui a un compañero de trabajo y le expliqué que el esquema de la base de datos parecía defectuoso. Expliqué la importancia de normalizar la base de datos para asegurar problemas de integridad de los datos, ahorrar espacio en el disco y facilitar el trabajo del programador (yo). Incluso di ejemplos de cómo podrían ocurrir anomalías de inserción, eliminación y actualización en el diseño actual. Sin embargo, el compañero de trabajo me explicó que no querían complicar demasiado la base de datos del proyecto, y que no cambiaría el período.
Así que ahora llevo un par de meses en el proyecto y me estoy tirando de los pelos cada vez que tengo que unir dos tablas para insertar un valor en un atributo que tiene una relación de uno a uno con el otro. (Así que el atributo debería haber sido solo un atributo de la relación principal). La base de datos se ve horrible, y me temo que en el futuro esto me volverá a la mente ya que programé la interfaz que usa la base de datos.
¿Alguien tiene alguna sugerencia sobre cómo hablar con un compañero de trabajo "superior" para que diseñe correctamente una base de datos? ¿O alguna sugerencia sobre cómo evitar ser condescentrado años en el camino para un diseño del que yo no tenía parte? ¿Debo negarme a trabajar en proyectos como este en el futuro? Deje un comentario en mi código que dice que la base de datos no fue cosa mía.
Gracias.
Editar: Información adicional en respuesta a los comentarios ...
sé que el de-normalización de una base de datos puede ser útil para los propósitos de velocidad, así que no estoy pasando por alto esto. Para aquellos que leen y no han escuchado sobre esta táctica, ilustraré un ejemplo. A menudo, los diseñadores de bases de datos tienen una relación de dirección que enumera la calle, la ciudad, el estado y el código postal de un usuario. Si bien todos saben que un código postal determina la ciudad y el estado, por lo tanto constituye una tabla que indexa los códigos postales de ciudades y estados. A menudo, los diseñadores de bases de datos combinarán las dos tablas, desnormatizándolas con previsión de que cada consulta para la dirección de un usuario requerirá una unión de la tabla de direcciones a la tabla comprimida. Esto, en última instancia, acelera el proceso de consulta, y es un razonamiento sensato para la des-normalización de partes de un diseño de base de datos.
Para completar aquí algunos detalles, la base de datos está diseñada para un sistema de Solicitud de viaje, por lo que los datos están relacionados con la información del visitante, fechas, etc. El esquema que utiliza la base de datos actual es impredecible de principio a fin. Desde las incoherencias más simples en los patrones de nomenclatura de variables (por ejemplo: num_of_visitors, arrivalMethod, etc.) hasta tener relaciones separadas definidas para un atributo de estado individual de uno a uno. Ejemplo: statusID representa el estado de la solicitud de recorrido, solo puede tener un estado válido seleccionado de un grupo de estados posibles (Aprobado, denegado, pendiente, cancelado). Por alguna razón, la base de datos tiene una tabla de estado que contiene: tour_id (Principal clave de la relación de gira), ID de estado. Esto permite que se definan múltiples estados para cada solicitud de viaje. Que, por diseño, una solicitud de recorrido solo debe estar en un estado en un momento dado. Entonces, es un defecto en el diseño, no un descuido mío.
No hay sugerencias, ya que este es un problema de gestión. Sin embargo, sí tienes mi simpatía. –
¿Siente que la gerencia apoyaría a su compañero de trabajo sin importar cuán coherentes y lógicos sean sus argumentos? – gbn
si ella está en una posición superior, las cosas pueden ser difíciles para usted. ¡Si fuera yo, comenzaría a enviar algunos currículos! –