Personalmente, no me gusta ninguna de sus soluciones aunque la segunda solución es "más adecuada" en términos de teoría de base de datos. Si tiene direcciones repetitivas, debe almacenarlas una vez.
El problema viene en la implementación. Cuando se realiza un pedido, tendrá que tomar una decisión sobre si desea utilizar una dirección existente, actualizar una dirección existente (por ejemplo, con un número de apartamento recién agregado) o crear una nueva dirección (el cliente se ha mudado). , tiene una nueva dirección de verano, lo que sea).
Para hacer esto, alguien (un empleado para ventas directas o por teléfono, el cliente o el programa para ventas en línea) tendrá que tomar una decisión sobre si está realizando una actualización de dirección o una dirección adicional operación. Es muy difícil lograr que los usuarios tomen este tipo de decisiones con precisión. Si se realiza una actualización cuando realmente se necesita una adición, ha corrompido su historial de pedidos (los pedidos anteriores apuntan a la nueva dirección). Si se realiza una adición cuando una actualización fue la elección correcta, ha eliminado el valor de la estructura normalizada.
En situaciones como esta he llegado, no del todo feliz, a la conclusión de que la mejor opción es almacenar una o más direcciones para el cliente y luego copiar la información de la dirección en los campos de la dirección en el orden mismo.
Si elige su segunda opción, debe planear escribir una muy buena interfaz de usuario en el sistema de direcciones para evitar el tipo de problemas que mencioné anteriormente. Y recuerde que no solo usted, sino que cada programador que trabaje en el proyecto en el futuro deberá comprender y acordar la gestión de esa tabla de direcciones.
Lo siento, debería haber agregado esto a mi pregunta original. Lo que pensé fue tener otra mesa para almacenar las direcciones de los clientes que podría actuar como una libreta de direcciones y el propósito de tener la tabla de direcciones de pedidos adicionales para que pueda almacenar permanentemente las direcciones proporcionadas para una orden, entonces el cliente debería decidir para actualizar una dirección en la tabla de direcciones del cliente, no afectará las direcciones proporcionadas para el pedido. ¿Sería esto mucho? – KSS