El momento más sensato para usar esto sería si hubiera dos conceptos separados que solo se relacionarían de esta manera. Por ejemplo, un automóvil solo puede tener un conductor actual, y el conductor solo puede conducir un automóvil a la vez, por lo que la relación entre los conceptos de automóvil y conductor sería de 1 a 1. Acepto que este es un ejemplo artificial para demostrar el punto.
Otra razón es que desea especializar un concepto de diferentes maneras. Si tiene una tabla de Persona y desea agregar el concepto de diferentes tipos de Persona, como Empleado, Cliente, Accionista, cada uno de ellos necesitaría diferentes conjuntos de datos. Los datos que son similares entre ellos estarían en la tabla Persona, la información especializada estaría en las tablas específicas para Cliente, Accionista, Empleado.
Algunos motores de base de datos luchan por agregar de manera eficiente una nueva columna a una tabla muy grande (muchas filas) y he visto tablas de extensión utilizadas para contener la nueva columna, en lugar de agregar la nueva columna a la tabla original. Este es uno de los usos más sospechosos de tablas adicionales.
También puede decidir dividir los datos para un solo concepto entre dos tablas diferentes por problemas de rendimiento o legibilidad, pero este es un caso razonablemente especial si está comenzando desde cero; estos problemas se mostrarán más adelante.
Primero, creo que se trata de modelar y definir qué consiste en una entidad separada. Suponga que tiene
customers
con uno y solo unoaddress
. Por supuesto, podría implementar todo en una sola tablacustomer
, pero si, en el futuro, le permite tener 2 o más direcciones, entonces deberá refactorizar eso (no es un problema, pero tome una decisión consciente).También puedo pensar en un caso interesante que no se menciona en otras respuestas donde dividir la tabla podría ser útil:
Imagina, de nuevo, que tienes
customers
con uno soloaddress
cada uno, pero esta vez es opcional tener una dirección. Por supuesto, podría implementar eso como un montón deNULL
columnas -able comoZIP,state,street
. Pero suponga que dado que tiene una dirección, el estado no es opcional, pero el ZIP sí lo es. ¿Cómo modelar eso en una sola tabla? Puede usar una restricción en lacustomer
tabla, pero es mucho más fácil dividir en otra tabla y hacer que la clave_externa sea NULL. De esa manera, su modelo es mucho más explícito al decir que la entidadaddress
es opcional y queZIP
es un atributo opcional de esa entidad.fuente
En mi época de programación, encontré esto solo en una situación. Que es cuando hay una relación de 1 a muchos y de 1 a 1 entre las mismas 2 entidades ("Entidad A" y "Entidad B").
Cuando la "Entidad A" tiene múltiples "Entidades B" y la "Entidad B" tiene solo 1 "Entidad A" y la "Entidad A" tiene solo 1 "Entidad B" actual y la "Entidad B" tiene solo 1 "Entidad A".
Por ejemplo, un automóvil solo puede tener un conductor actual, y el conductor solo puede conducir un automóvil a la vez, por lo que la relación entre los conceptos de automóvil y conductor sería de 1 a 1. - Tomé prestado este ejemplo de la respuesta de @Steve Fenton
Donde un conductor puede conducir varios coches, pero no al mismo tiempo. Entonces, las entidades Car y Driver son de 1 a muchos o de muchos a muchos. Pero si necesitamos saber quién es el controlador actual, también necesitamos la relación 1 a 1.
fuente
Otro caso de uso podría ser si se excede el número máximo de columnas en la tabla de la base de datos. Entonces podrías unirte a otra mesa usando OneToOne
fuente