Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Duda conceptual con Unique y Primary key

Estas en el tema de Duda conceptual con Unique y Primary key en el foro de Bases de Datos General en Foros del Web. Hola, no estoy muy puesto en bases de datos y ahora estoy estudiando una asignatura con Postgresql y MySql. El tema es una duda conceptual ...
  #1 (permalink)  
Antiguo 11/03/2012, 11:53
 
Fecha de Ingreso: octubre-2006
Mensajes: 169
Antigüedad: 18 años
Puntos: 2
Duda conceptual con Unique y Primary key

Hola,

no estoy muy puesto en bases de datos y ahora estoy estudiando una asignatura con Postgresql y MySql. El tema es una duda conceptual que tengo. Si dispongo de tres tablas con sus claves primarias y foraneas, por ejemplo:

- una en la que tengo clientes con un PK_id_cli
- otra en la que tengo artículos con un PK_id_art
- y una tercera con los pedidos en las que tengo FK_id_cli, FK_id_art y una PK_Fecha_compra.

La clave primaria de esta tercera tabla es la fecha del pedido, pero no es unique ya que puede haber la misma fecha para varios clientes que realicen un pedido el mismo día. Para mi ya funcionaría en la práctica pero la pregunta es, ¿sería necesario, por no decir obligatorio, poner una clave primaria unique que fuera una sucesión tipo 1, 2, 3, 4, ....?

Un saludo.
  #2 (permalink)  
Antiguo 11/03/2012, 16:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Duda conceptual con Unique y Primary key

Cita:
La clave primaria de esta tercera tabla es la fecha del pedido, pero no es unique ya que puede haber la misma fecha para varios clientes que realicen un pedido el mismo día. Para mi ya funcionaría en la práctica pero la pregunta es, ¿sería necesario, por no decir obligatorio, poner una clave primaria unique que fuera una sucesión tipo 1, 2, 3, 4, ....?
Por empezar, todas, absolutamente todas las claves primarias son UNIQUE. Eso es una condición necesaria y obligatoria de las PK por su propia definición: "Campo o conjunto de campos que identifica univocamente un registro determinado de una tabla".
Ahora bien, desde el punto de vista de las base de datos relacionales, una tabla que depende de otras para existir, es la representación de una entidad débil, por lo que hereda la clave de otra.
Pero la tabla Pedido puede consierarse o parte de una relación N:N o una entidad independiente. Eso dependerá del análisis del sistema.
Si lo consideramos como parte de una relación N:N, la herencia de las claves de las otras dos tablas debería ser suficiente. Pero sucede que un cliente puede tener muchos pedidos, en diferentes instantes del tiempo, por lo que las dos claves no son suficientes. Necesitan del atributo de tiempo para completar la clave, ya que lo que seguro que no puede existir es dos pedidos del mismo cliente, creados en el mismo momento.
Ergo, La PK debería estar compuesta por PK de Cliente, Pk de Artículo y Fecha_Hora cuando se ejecuta.
Así podría andar, pero no es correcto...
Un Pedido es, conceptualmente, una entidad independiente, la cual tiene un identificador propio del sistema (usualmente sucursal y numero de emisión), y está relacionado con un cliente y una lista de items.
En ese sentido, la PK está formada por el identificador que el sistema requiera, no hay una regla universal, pero es muy común numerar secuencialmente los documentos. Además, tiene otros atributos que son mandatorios: Pk del Cliente del pedido, Lista de Ids y cantidades de articulos, fecha de emisión del docucmento, fecha de entrega pactada del pedido, y algún otro que el sistema requiera. Todos estos atributos deben ser NOT NULL, pero no UNIQUE, y algunos de ellos serán FK.

Esto no queda acá, porque esa tabla aún debe ser normalizada, lo que generará al menos dos tablas: Pedido y DetallePedido. Pero ese es otro tema.

Finalmente: El modelo E-R determina que cada entidad debe tener una PK, pero no especifica que sea numérica e incremental. Sólo que debe existir, debe ser única y no puede ser nula.
Se usan incrementales por costumbre, pero en determinados contextos traen más problemas que ventajas. Lo mejor, a mi juicio, es buscar qué atributos natural de la entidad puede ser el identificador (determinante) de la misma. Generalmente esa es la mejor PK.

¿Se va entendiendo el tema?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 12/03/2012, 05:30
 
Fecha de Ingreso: octubre-2006
Mensajes: 169
Antigüedad: 18 años
Puntos: 2
Respuesta: Duda conceptual con Unique y Primary key

Muchas gracias gnzsoloyo por la respuesta y gracias por la negrita, je, je, que hará que no me olvide de tus aclaraciones en toda mi vida. Está claro que tengo que repasar el modelo E-R, que dí el año pasado pero necesita su consulta constante. Lástima que no tenía un temario muy esclarecedor.

Un saludo.

Etiquetas: key, mysql, primary, sql, tabla, unique
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:39.