Pregunta

Estoy construyendo un sistema de base de datos y tener problemas con el diseño de una de mis mesas.

En este sistema hay una tabla de usuarios, una tabla de objetos, una tabla de elementos y la tabla de costos.

Un registro único en el cuadro de costos es determinar por el usuario, objeto, elemento y año. Sin embargo, no puede haber varios registros que tienen el mismo año, si el artículo es diferente.

La jerarquía va usuario-> objeto-> Item-> años, varios años únicos por artículo, varios elementos únicos por objeto, múltiples objetos únicos por usuario, múltiples usuarios únicos.

¿Cuál sería la mejor manera de diseñar la tabla de costos?

Estoy pensando en que incluye el identificador de usuario, objectid y ITEMID como claves externas y luego usando una clave compuesta que consiste en ID de usuario, objecid, itemid y costyear. He oído que las claves compuestas son un mal diseño, pero estoy seguro de cómo estructurar esto para conseguir lejos de usar una clave compuesta. Como se puede decir de mi base de datos de habilidades de construcción son un poco oxidado.

Gracias!

P.S. Si importa, este es un db interbase.

¿Fue útil?

Solución

Para evitar la clave compuesta, que acaba de definir una clave sustituta. Esto es un valor artificial, por ejemplo, un contador automático.

Aún puede (y debe) definir una restricción única en estas columnas.

Por cierto: no sólo su recomienda no utilizar claves compuestas, también es recomendable utilizar claves suplentes. En todas las tablas.

Otros consejos

Utilice un campo de clave generado internamente (llamado claves suplentes), algo así como CostID, que los usuarios nunca verán sino que identificar de forma única cada entrada de la tabla de costes (en SqlServer, campos como uniqueidentifier o identidad haría el truco.)

Trate la construcción de su base de datos con una clave compuesta usando exactamente las columnas que usted ha enunciado, y ver qué pasa. Usted puede ser sorprendido agradablemente. Asegurándose de que no hay datos que faltan en esos cuatro columnas, y asegurarse de que no hay dos filas tienen el mismo valor en todas las cuatro columnas ayudará a proteger la integridad de sus datos.

Cuando se declara una clave primaria compuesta, el orden de las columnas en su declaración no afectará a las consecuencias lógicas de la dclaration. Sin embargo, el índice compuesto que construye el DBMS para usted también tendrá las columnas en el mismo orden, y el orden de las columnas en un índice compuesto hace afectar al rendimiento.

Para las consultas que especifican sólo uno, dos, o tres de estas columnas, el índice será inútil si la primera columna en el índice es una columna no se especifica en la consulta. Si usted sabe de antemano cómo sus consultas se gonig a mí, y que consulta mayoría de la necesidad de correr rápido, esto puede ayudarle a declarar las columnas de la clave principal en el orden correcto. En raras ocasiones la creación de dos o tres índices una columna adicional puede acelerar algunas consultas, a costa de ralentizar actualizaciones.

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