Pregunta

Estoy utilizando ASP.NET y el marco de la entidad para hacer una página web. Actualmente tengo una tabla de asignación de muchos a muchos relación entre ... digamos que los usuarios y los equipos de fútbol. Por lo tanto:

Los usuarios equipos
UserTeams

Parte 1 : ¿Es mejor la práctica de utilizar una clave compuesta para la clave primaria de la tabla mapa? En otras palabras:

UserTeams Mesa
PK UserId
PK ID del equipo
PreferenceId

Parte 2 : La advertencia es que también tengo otra tabla. Digamos que es "UserTeamPredictions" que almacena las predicciones del usuario para un equipo determinado para cada año. Esa tabla tiene una clave externa que apunta de nuevo a la mesa de mapas. Por lo que se ve algo como esto:

UserTeamPredictions Mesa
PK UserTeamPredictionId
FK UserId
FK ID del equipo
Predicción PredictionYear

Esto parece funcionar bien en el marco de la entidad, sin embargo, he tenido algunos problemas al hacer referencia a las relaciones en controles de terceros que utilizo como Telerik. A pesar de que podría no ser la configuración de datos ideal, debería cambiar la estructura de la tabla / relaciones de manera que es más fácil de trabajar en el código con el enlace de datos y otras cosas?

El cambio sería añadir una clave primaria número entero a la tabla de mapa de UserTeams, permitiendo que la mesa UserTeamPredictions para hacer referencia a la clave directamente, en lugar de a través de la clave compuesta como lo hace actualmente:

UserTeams Mesa
PK UserTeamId
FK UserId
FK ID del equipo
PreferenceId

UserTeamPredictions Mesa
PK UserTeamPredictionId
FK UserTeamId
Predicción PredictionYear

¿Qué opinas!?

¿Fue útil?

Solución

Yo elegiría para no hacerlo. Me gustaría utilizar una clave sustituta y poner un índice único en las columnas ID de usuario y ID del equipo. Me pongo muy enferma de claves compuestas cuando hay más de dos, y en lugar de tener una mezcla de claves compuestas y sustitutos, elegir para ir con toda la sustituta, llaves autoincrement sin sentido siempre que sea posible.

Esto tiene la ventaja de que le da un buen rendimiento en uniones, y significa que siempre se sabe la clave para una tabla determinada (nombre de la tabla + ID), sin tener que hacer referencia al esquema. Algunas herramientas ORM sólo funcionan correctamente con una sola columna en lugar de claves compuestas, también.

Otros consejos

Usted debe cambiarlo. Buscar desbordamiento de pila para las discusiones sobre "llaves naturales" - es casi universalmente de acuerdo en que las claves sustitutas son mejores, especialmente cuando se utiliza la generación entidad. teclas físicas o compuestos hacen no jugar bien con capas DAL estilo marco de la entidad en general. Por ejemplo, Lightspeed y subsónico tanto, es necesario tener una sola columna única como PK ... Lightspeed en su versión actual, incluso va tan lejos que insistir en que la columna se llama "Id", aunque eso es un cambio próxima versión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top