Cómo determinar dónde colocar la clave externa en este escenario?
Pregunta
Si tengo dos mesas - inicios de sesión y Usuarios, de la siguiente manera:
Logins
LoginIdNo
UserIdNo
HashedPassword
Users
UserIdNo
LoginIdNo
Username
Cada entrada "tiene un usuario" y cada usuario "tiene un inicio de sesión", pero que "pertenece" a la que?
¿Es simplemente una cuestión de criterio o hay una fórmula bien definida para determinar dónde la clave externa debe residir?
Solución
Esta es una relación uno-a-uno. Donde se coloca la clave externa, probablemente, se decide por la opcionalidad en esos casos.
¿Hay alguna razón en particular que haya dividirla en dos entidades? No soy un gran fan de uno-a-uno asignaciones, sobre todo en ORM como APP en las que son difícil de poner en práctica (si se utiliza la clave principal de una como la clave externa a otra).
¿Cuál es, en su sistema, es la diferencia entre una sesión y un usuario?
Si sesión llegara a suceder cada vez que un inicio de sesión de usuario en (es decir, se trata de una pista de auditoría de la actividad del usuario), entonces usted tiene una relación de uno a muchos entre usuario y acceso al sitio y acceso al sitio deben utilizar una clave externa identificación de usuario.
Sin embargo, en este caso en el que el nombre de usuario está en una tabla y la clave está en otra y hay una relación uno-a-uno betwene los dos tiene que preguntar por qué están separados.
Otros consejos
Desde un inicio de sesión no se asocia con más de un usuario (y viceversa), es una decisión arbitraria de cómo se defina la relación (y, por tanto, donde se coloca la clave externa). A menos que usted también va a añadir otros atributos (Firleds) o utilizar los roles, que podría ser más fácil de simplemente definirlo así:
Users
UserIdNo
Username
HashedPassword