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

Contradiccion de Logica

Estas en el tema de Contradiccion de Logica en el foro de SQL Server en Foros del Web. Buenos dias , Tengo una contradiccion de logica que no se como resolver, si me podrian ayudar se los agradeceria mucho, el asunto es que ...
  #1 (permalink)  
Antiguo 28/01/2010, 07:47
Avatar de jsrc1990  
Fecha de Ingreso: enero-2009
Mensajes: 95
Antigüedad: 15 años, 9 meses
Puntos: 0
Pregunta Contradiccion de Logica

Buenos dias ,

Tengo una contradiccion de logica que no se como resolver, si me podrian ayudar se los agradeceria mucho, el asunto es que tengo 3 Tablas,
en realidad son mas pero vamonos por Estado Civil

Usuarios
Datos Personales
Estados Civiles

Para Poder Crear un Usuario, se necesitan tener unos "Datos Personales" Previos, esto quiere decir que la Tabla "Usuarios" tiene
un campo "Codigo" con Referencia a el "Numero de Identificacion" de la Tabla "Datos Personales" (Usuarios.Codigo=Datos_Personales.Numero_de_Identi ficacion)
"El Codigo de la Tabla Usuarios, es Primary Key y a la vez Foreign Key de la Tabla Datos Personales".

Ahora bien, La Tabla "Datos Personales" Necesita de la Tabla "Estados Civiles" para como su nombre lo dice, El ente poder tener un "Estado Civil"
(Datos_Personales.Codigo_Estado_Civil=Estados_Civi les.Codigo) y ahora, necesito que Estados_Civiles tenga un campo "Operado_Por", la cual
debe de hacer la Referencia al codigo de la tabla "Usuarios" o a Numero de Identificacion "Datos Personales", la cual indica quien Registro o
Edito el registro.

Pero como ven, se hace una especie de circulo, si, voy a crear la tabla Usuarios no me deja hasta crear la Tabla Datos Personales, Si voy a Crear
la Tabla Datos Personales, no me deja hasta crear la Tabla Estados Civiles y si voy a crear la Tabla Estados Civiles, no me deja hasta crear la
Tabla Usuarios, si fuere en el caso de mostrar por nick quien lo opero o el Nombre del "Usuario" por la Tabla "Datos Personales".

Muchas gracias de Antemano, siento haberme explicado bien, sino pregunteme.

Jsrc1990
  #2 (permalink)  
Antiguo 28/01/2010, 09:23
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 18 años, 3 meses
Puntos: 0
Respuesta: Contradiccion de Logica

SI, los ciclos no deben estar en un modelo e BD, pero lo que si podrías es quitar la relacion menos importante, por ejemplo la relacion Estado_Civil.Operador_Por ó quitar la relacion entre Datos_Personales-Estado_Civil.

Como está actualmente no funciona al menos que evites la integridad referencial.

Saludos!!
  #3 (permalink)  
Antiguo 28/01/2010, 09:27
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Contradiccion de Logica

Ademas del consejo de rusinho, debes tomar en cuenta que por reglas del buen desarrollo, tanto las PK y sus FK, deberias llamarse igual.
  #4 (permalink)  
Antiguo 28/01/2010, 10:33
Avatar de jsrc1990  
Fecha de Ingreso: enero-2009
Mensajes: 95
Antigüedad: 15 años, 9 meses
Puntos: 0
De acuerdo Respuesta: Contradiccion de Logica

Que tal,

Gracias por las respuestas , bueno con base en rusinho... pues si, que no deben haber ciclos viciosos en las Referencias, quitare la referencia de menos importancia, Estado_Civil.Operador_Por, Unicamente guardare el Nombre y no el codigo que haga referencia como tenia planeado,

No quito Datos_Personales-Estado_Civil porque esta si me parece bastante importante en la relacion, al igual que otras tablas de su misma especie.

iislas, jaja si he peleado bastante por las Reglas del buen desarrollo, en la forma y Nomenclaruta, y he ido Estandarizando, y falta, gracias por el agregado.

Ha, por cierto: queda el Orden asi:

Estados Civiles>>Datos Personales>>Usuarios

Jsrc1990
  #5 (permalink)  
Antiguo 02/02/2010, 04:45
 
Fecha de Ingreso: enero-2010
Ubicación: Sevilla
Mensajes: 202
Antigüedad: 14 años, 9 meses
Puntos: 5
Respuesta: Contradiccion de Logica

Creo que es un problema de diseño.

Si haces que la tabla de Datos personales guarde toda la información de una persona, la de
Usuarios solo debería guardar los datos propios de un usuario (pero no los personales) y la de Estados civiles, la información relativa a los estados de una persona.

Así quedaría:
Datos personales que no tiene FK.
Usuarios con una FK de Datos personales.
Estados civiles con una FK de Datop personales.

De esta forma no tienes ciclos.

Por último, te recomiendo que cada tabla tenga su propio campo autonumérico IDENTITY, aparte de los campos de información que necesites y que sea por este campo por el que establezcas las relaciones.

Espero que te haya sido de ayuda.

Etiquetas: logica
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 16:44.