Estoy trabajando en una base de datos que necesita representar computadoras y sus usuarios. Cada computadora puede tener múltiples usuarios y cada usuario puede asociarse con varias computadoras, por lo que es una relación clásica de muchos a muchos. Sin embargo, también debe existir un concepto de usuario "principal". Tengo que ser capaz de unirme contra el usuario principal para listar todas las computadoras con sus usuarios principales. No estoy seguro de cuál es la mejor manera de estructurar esto en la base de datos:Many-to-Many con "Primary"
1) Como lo estoy haciendo actualmente: vincular la tabla con una columna booleana IsPrimary. Unirse requiere algo como ON (c.computer_id = l.computer_id AND l.is_primary = 1). Funciona, pero se siente mal porque no es fácil restringir los datos para que solo tengan un usuario principal por computadora.
2) Un campo en la tabla de la computadora que apunta directamente a una fila de usuario, todas las filas en la tabla de usuario representan usuarios no primarios. Esto representa mejor la restricción de uno-primario-por-computadora, pero dificulta la obtención de una lista de usuarios de computadoras.
3) Un campo en la tabla de la computadora que enlaza a una fila en la tabla de enlaces. Se siente extraño ...
4) ¿Algo más?
¿Cuál es la forma "relacional" de describir esta relación?
EDITAR: @Mark Brackett: La tercera opción me parece mucho menos extraña ahora que ha demostrado lo agradable que se ve. Por alguna razón, ni siquiera pensé en usar una clave foránea compuesta, así que pensé que tendría que agregar una columna de identidad en la tabla de enlaces para que funcione. Se ve genial, gracias!
@ j04t: Genial, estoy contento de que estemos de acuerdo en el # 3 ahora.
por eso que es difícil enumerar el usuario del ordenador en el punto 2? – albertein
Porque la tabla de enlaces no contiene todos los usuarios de una computadora determinada. –