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

Integridad referencial

Estas en el tema de Integridad referencial en el foro de Mysql en Foros del Web. Hola Tengo una base de datos que tiene clientes y los clientes tienen notas, el problema es que segun yo, no puedo usar integridad referencial, ...
  #1 (permalink)  
Antiguo 18/12/2009, 11:52
Avatar de dalyla  
Fecha de Ingreso: septiembre-2005
Mensajes: 135
Antigüedad: 18 años, 7 meses
Puntos: 1
Busqueda Integridad referencial

Hola

Tengo una base de datos que tiene clientes y los clientes tienen notas, el problema es que segun yo, no puedo usar integridad referencial, porque puede que el cliente no tenga notas entonces rompe con lo de 1 a muchos. El problema es que lo tengo que hacer por codigo.

Ademas que suele pasar que dos clientes tengan el mismo idnota. se puede hacer algo aqui con base de datos?
  #2 (permalink)  
Antiguo 18/12/2009, 13:21
Avatar de Snaft_J1  
Fecha de Ingreso: diciembre-2006
Mensajes: 285
Antigüedad: 17 años, 4 meses
Puntos: 8
Respuesta: Integridad referencial

hola,

ah!,ah!,ah!

te equivocas, si se puede hacer y en caso de no tener notas lo que debes hacer es tu consulta con un LEFT JOIN, y no deberian tener idnotas repetidos pues podrias tenerlos como Uni, PK.

revisa tu modelo E.R.

Saludos!.
__________________
-= El conocimiento y el saber te hacen un ser libre =-
Ando en busca de conocimiento....
  #3 (permalink)  
Antiguo 18/12/2009, 13:29
Avatar de dalyla  
Fecha de Ingreso: septiembre-2005
Mensajes: 135
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Integridad referencial

Bueno tengo otra tabla asi, un pokito diferente porque la ligo con el idcliente

FK clienteflotilla.idcliente=clientes.idcliente PK

y aqui esta al reves

notas.idnota = clientes.idnota

aqui ninguna de las dos es PK, por que?

porque yo tengo otras tablas que usan notas, y esas otras tablas tienen su idnota al igual que clientes.

notas.idnota=ventas.idnota

no le pongo a clientes ni ventas PK en el idnota porque por lo regular tendran un 0 en el idnota si no tienen.

Se me ocurre poner una tabla para que el idnota sea llave y luego referenciarla al detalle, pero se hace mas grande la bd, o tiene que ser asi?


notaspk 1 -> M notasdetalle

clientes 1 - > 1 notaspk

ventas 1 -> 1 notaspk

no se si enredo las cosas espero ke no

gracias
  #4 (permalink)  
Antiguo 18/12/2009, 15:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Integridad referencial

Cita:

Tengo una base de datos que tiene clientes y los clientes tienen notas, el problema es que segun yo, no puedo usar integridad referencial, porque puede que el cliente no tenga notas entonces rompe con lo de 1 a muchos. El problema es que lo tengo que hacer por codigo.
No se rompe nada porque la restricción es que cada nota pertenezca a un cliente, y que no pueda existir una nota sin cliente.

Cita:
Ademas que suele pasar que dos clientes tengan el mismo idnota. se puede hacer algo aqui con base de datos?
Si tienes dos clientes con la misma nota, o tienes un error de diseño en la base, o te falta una tabla, o bien está mal definido el cliente.
Una nota no puede pertenecer a dos clientes al mismo tiempo. Lo que si puede suceder es que un cliente sea una sociedad formada por más de una persona, caso en el cual el cliente es la sociedad, y no las personas que forman la socidad. Eso requiere un ajuste de modelo.
Ahora bien, si una nota puede corresponder a más de una persona, te está faltando entonces una tabla, porque eso daría una relación N:N, y por definición, toda relación N:N en el modelo lógico genera una tabla en el modelo físico.

Cita:
Bueno tengo otra tabla asi, un pokito diferente porque la ligo con el idcliente

FK clienteflotilla.idcliente=clientes.idcliente PK

y aqui esta al reves

notas.idnota = clientes.idnota

aqui ninguna de las dos es PK, por que?

porque yo tengo otras tablas que usan notas, y esas otras tablas tienen su idnota al igual que clientes.

notas.idnota=ventas.idnota

no le pongo a clientes ni ventas PK en el idnota porque por lo regular tendran un 0 en el idnota si no tienen.

Se me ocurre poner una tabla para que el idnota sea llave y luego referenciarla al detalle, pero se hace mas grande la bd, o tiene que ser asi?


notaspk 1 -> M notasdetalle

clientes 1 - > 1 notaspk

ventas 1 -> 1 notaspk

no se si enredo las cosas espero ke no

gracias
Esto merece un análisis más detallado, porque lo que me da la impresión es que no tienes claro el modelo E-R, o al menos el análisis de las relaciones entre entidades no está bien realizado.
Tomando solamente la última parte, se puede describir que en tu modelo, las relaciones de dependencia serían:
Cita:
NOTA <- DETALLE_NOTA
NOTA <- CLIENTE
VENTA <- NOTA
Esto significaría:
Cita:
Reglas del negocio:
1. El vendedor emite una orden de compra que pertenece a un cliente.
2. La orden de compra debe tener uno o más items. Si no tiene items, no existe.
3. El personal de cobranzas realiza un cobro que corresponde a una nota de compra y lo asienta como venta.
En este caso:
1. La PK de Cliente va como FK de la Nota.
2. La PK de Nota va como FK en Detalle_Nota, y junto con el ID del ítem, componen una PK de dos campos.
3. La PK de Nota va también como FK en Venta.

Así, por ejemplo, sería el modelo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 18/12/2009, 16:30
Avatar de dalyla  
Fecha de Ingreso: septiembre-2005
Mensajes: 135
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Integridad referencial

Perdon por poner la tabla ventas, las notas no son de venta son simples notas, recordatorios, por ejemplo : el cliente llamo para pedir cambio de domicilio, o el cliente saldra de vacaciones y requiere un plazo, etc, infinidad de cosas. Y tienen mucha razon en que no tengo claro el modelo E-R.

No se si explicando lo anterior me explique porque no le puse llave primaria en ninguna, asi un cliente, una venta, un proveedor, un objeto X que yo quiera puede tener varias notas. Tambien por eso pregunto si tengo que crear dos tablas de notas una que guarde las llaves primarias y otro que guarde el monton de notas.

notaspk 1 -> M notasdetalle

clientes 1 - > 1 notaspk

ventas 1 -> 1 notaspk

porque actualmente yo tengo

notas.idnota = clientes.idnota
notas.idnota = ventas.idnota
notas.idnota = proveedores.idnota
notas.idnota = XX.idnota

Baje el mysql workbench y me ayuda a entender un pokito mas, pero aqui no puedo hacer la relacion por este punto que no se como debe quedar
  #6 (permalink)  
Antiguo 18/12/2009, 16:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Integridad referencial

Cita:
Perdon por poner la tabla ventas, las notas no son de venta son simples notas, recordatorios, por ejemplo : el cliente llamo para pedir cambio de domicilio, o el cliente saldra de vacaciones y requiere un plazo, etc, infinidad de cosas. Y tienen mucha razon en que no tengo claro el modelo E-R.
No se si explicando lo anterior me explique porque no le puse llave primaria en ninguna, asi un cliente, una venta, un proveedor, un objeto X que yo quiera puede tener varias notas. Tambien por eso pregunto si tengo que crear dos tablas de notas una que guarde las llaves primarias y otro que guarde el monton de notas.
Bueno, en realidad, más que bajarte una herramienta CASE como el MySQL WorkBench, lo que deberías hacer es tratar de comprender el modelo Entidad-Relación, porque evidentemente vas a tener problemas con lo que estás haciendo.
La frase que destaco, ya de entrada, pone en evidencia que te estás desviando del modelo, ya que es requisito fundamental la existencia de una PK. Si no la pones, estás haciendo cualquier cosa, pero no estás trabajando en bases de datos relacionales, y luego simplemente no podrás realizar consultas que puedan devolverte datos consistentes.

Lee un poco de esto: Modelo Entidad-Relación, y luego pregunta lo que te plantee dudas:
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 18/12/2009, 17:08
Avatar de dalyla  
Fecha de Ingreso: septiembre-2005
Mensajes: 135
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Integridad referencial

Ok entonces como dices lo que estoy haciendo es cualquier cosa, se oye feo pero tienes razon, y como dices por eso no tiene datos consistentes, eso me aclara la duda de que si se puede hacer algo asi, y la respuesta es NO, muchas gracias por tu ayuda y por el link :)
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 04:07.