¿Es una buena práctica (o tendría algún efecto adverso) usar un conjunto de 4 columnas para identificar una fila como única (una es una clave extranjera y las otras tres son tipos de datos flotantes)? Estoy intentando crear una tabla que (con 4 teclas vinculadas) describa una entrada única en la tabla. Tengo curiosidad si este es un buen plan de ataque o si hay una mejor manera.
Para fines visuales, imagine la siguiente tabla. Tenemos elementos de inventario que están organizados como la siguiente tabla: ( [K]
es simbólico de la clave primaria, las líneas son relaciones)
Sheet_Class Sheet_Type Sheet_Size
=========== ========== ==========
[K] Sheet_Class-. [K] Sheet_Type--. [K] Sheet_Size
'---- Sheet_Class '---- Sheet_Type
Length
Width
Thickness
Los datos pueden presentarse de la siguiente manera, pero por brevedad he excluido traer las columnas vinculadas:
Sheet_Class Sheet_Type Sheet_Size (Tables)
[Sheet_Class] [Sheet_Type] [Length], [Width], [Thickness] (Column Values)
============= ============ ==============================
Aluminum
5052-H32
48, 96, 0.032
48, 96, 0.040
48, 96, 0.063
6061-T6
60, 120,0.032
60, 120,0.040
60, 120,0.063
Steel
1018-CRS
48, 96, 0.018
48, 96, 0.023
48, 96, 0.031
Tal como está (y lo he mostrado en mi "esquema" arriba), utilizo una clave primaria entera (incremento automático) simple para las entradas en la tabla Sheet_Size . Sin embargo, me gustaría saber si es mejor usar una combinación de las columnas Sheet_Type , Length , Width y Thickness . Dado que cada entrada en Sheet_Size debería compartir todas estas cualidades únicas, y que un campo de incremento automático no demostraría esto lo suficientemente bien, ¿es esta la mejor ruta a seguir?
Si no estoy explicando la situación lo suficientemente bien, hágamelo saber. Me encuentro necesitando dividir estas porciones (Clase vs. Tipo vs. Tamaños reales de existencias) de un material inventariado para otros propósitos lógicos, pero estoy preparado para cualquier otro tipo de retroalimentación.
Cualquier orientación sería apreciada.
Actualización (08-12-2011)
Después de las respuestas publicadas, he decidido hacer una combinación de la respuesta de la marca y la respuesta de X-Zero . Decidí que es una buena idea colocar una restricción única en las columnas de longitud, ancho y grosor, pero también me gusta la idea de dividir tamaños de material en filas únicas y vincularlas con una relación.
Desafortunadamente, no puedo aceptar ambas respuestas, por lo que voy a aceptar X-Zeros por considerar (lo que siento) una mirada más crítica al problema y ofrecer un ajuste de esquema.
Gracias a todos por sus respuestas.
fuente
Se parece a un naturales vs sustituto decisión clave, opinión sobre el cual oscila entre considerado y práctico a académicos , lindando con el dogma. Dependiendo del RDBMS, existen consideraciones para el modelo físico que pueden tener implicaciones de rendimiento significativas , por ejemplo, elección de clave en clúster en SQL Server.
Personalmente, si tengo una clave candidata estrecha y de un solo atributo, me siento tentado a utilizarla. Teclas anchas y / o compuestas, por defecto estoy agregando un sustituto al modelo. En su caso, votaría por la columna de identidad en Sheet_Size como clave principal agrupada y una restricción única en tipo / longitud / ancho / grosor.
fuente
Sheet_Size INT PRIMARY KEY
yLength UNIQUE
,Width UNIQUE
,Thickness UNIQUE
? Todavía no entiendo cómo eso evita duplicados en la tabla (sin aplicar lógica a la interfaz de inserción). (¿Tal vez me estoy perdiendo algo?)Te redirigiré un poco a esta respuesta de una pregunta anterior .
Cita: "En cuanto a la forma de diseñar esa clave principal, hay dos escuelas de pensamiento:
A qué línea te adhieres, es solo cuestión de gustos ".
Los efectos secundarios de cualquier solución elegida podrían ser:
El uso de teclas compuestas en todas partes probablemente
el uso de claves generadas probablemente:
Personalmente, prefiero las claves de IDENTIFICACIÓN INT generadas, pero lo que le convenga debería estar bien.
fuente
La clave compuesta tiene mucho sentido. La implementación de esa clave garantiza que los atributos del negocio no se puedan duplicar. Eso es algo bueno porque registrar los mismos datos varias veces causaría ambigüedad, dependencias indeseables y haría que los errores del usuario y los datos incorrectos sean más probables.
La clave de incremento automático por sí sola no protegerá la integridad de sus datos comerciales. Si la clave de incremento automático no sirve para propósitos particulares (por ejemplo, como el objetivo de una referencia de clave externa en otra tabla), entonces se puede descartar de forma segura.
fuente