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

Ayuda con el modelado de base de datos

Estas en el tema de Ayuda con el modelado de base de datos en el foro de Bases de Datos General en Foros del Web. Buenas noches a todos. Tengo una pequeña duda a la hora de hacer una parte de mi modelado. El problema es el siguiente: Tengo mi ...
  #1 (permalink)  
Antiguo 27/11/2009, 19:52
 
Fecha de Ingreso: abril-2008
Mensajes: 21
Antigüedad: 16 años
Puntos: 0
Ayuda con el modelado de base de datos

Buenas noches a todos.
Tengo una pequeña duda a la hora de hacer una parte de mi modelado.

El problema es el siguiente:

Tengo mi entidad Asistencia(de alumnos), ésta va a tener 3 estados(Ausente, Tardanza o Presente), pero solo en el caso de que sea Ausente, se podrá asignar una Justificacion, la cual tendrá un codigo, descripcion, etc. Mi pregunta es, ¿Cómo tengo que crear las tablas con sus respectivos atributos?¿Es necesario crear una tabla por cada estado?. Agradezco sus respuestas anticipadamente.
  #2 (permalink)  
Antiguo 28/11/2009, 07:55
Avatar de Claw  
Fecha de Ingreso: abril-2009
Mensajes: 299
Antigüedad: 15 años
Puntos: 9
Respuesta: Ayuda con el modelado de base de datos

Puedes crear una tabla con los tres estados y luego una restricción semántica que obligue a que si hay un estado Ausente, entonces deberá haber una Justificación asociada (mediante un trigger, por ejemplo).

Si crearas tres tablas tendrías que la tabla Ausente tiene una relación binaria con la tabla Justificación.

Salu2
  #3 (permalink)  
Antiguo 28/11/2009, 20:29
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: Ayuda con el modelado de base de datos

Holas,

Podrias ser tambien asi:

Tabla Asistencia:
---------------------
idAsistencia
estado

Tabla Justificacion:
----------------------
idJustificacion
idAsistencia
codigo
descripcion
...


Y solo cuando se ingrese en la tabla Asistencia en el campo estado "ausente" o algun valor digamos "3" entonces por lenguaje en el servidor tendrias que insertarlo en la tabla Justificacion. Esto se puede hacerlo como te dije con un lenguaje de servidor o tambien con un trigger o disparador al momento de ingresarlo.


Saludos
Gildus
__________________
.: Gildus :.
  #4 (permalink)  
Antiguo 29/11/2009, 00:06
 
Fecha de Ingreso: abril-2008
Mensajes: 21
Antigüedad: 16 años
Puntos: 0
Respuesta: Ayuda con el modelado de base de datos

Gracias por la respuesta Claw, entiendo lo del trigger, pero a la hora de crear las tablas, tendría que dejar a Justificacion aparte sin relacion a otra tabla?
  #5 (permalink)  
Antiguo 29/11/2009, 00:14
 
Fecha de Ingreso: abril-2008
Mensajes: 21
Antigüedad: 16 años
Puntos: 0
Respuesta: Ayuda con el modelado de base de datos

Cita:
Iniciado por gildus Ver Mensaje
Holas,

Podrias ser tambien asi:

Tabla Asistencia:
---------------------
idAsistencia
estado

Tabla Justificacion:
----------------------
idJustificacion
idAsistencia
codigo
descripcion
...


Y solo cuando se ingrese en la tabla Asistencia en el campo estado "ausente" o algun valor digamos "3" entonces por lenguaje en el servidor tendrias que insertarlo en la tabla Justificacion. Esto se puede hacerlo como te dije con un lenguaje de servidor o tambien con un trigger o disparador al momento de ingresarlo.


Saludos
Gildus

Hola Gildus, muchas gracias por la respuesta también

Mira lo que tu estas haciendo es pasar el codigo de asistencia a la tabal justificacion, pero con eso creo que estarias diciendo que por 1 asistencia con estado ausente pueden haber muchas justificaciones, lo que yo quiero es al revés, que 1 justificacion se la pueda asignar a muchas asistencias con estado ausente. El problema es el siguiente, si yo paso el codigo de justificacion a la tabla asistencia como foreign key, entonces si la asistencia fuera presente, yo no tendria que poner nada en ese foreign key y seria null lo cual creo que no se puede, por eso le decía a Claw si era posible dejar a la tabla justificacion apartada de las demas tablas. Corrigeme si me equivoco por favor.

Saludos.
  #6 (permalink)  
Antiguo 29/11/2009, 07:23
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: Ayuda con el modelado de base de datos

Entonces si podria usarse como foreignkey en la otra tabla de asistencia, y si podrias ponersele null si en caso de no que se asigne, ademas no seria una buena practica relacionarlo sino como una tabla independiente ("Justificacion"), porque a la hora de indexarlo el IdJustificacion en Asistencia se te hara lento las busquedas usar datos null en campo siempre es lento nomucho que digamos ni capaz se note, pero mientras va creciendo los datos se notara un poco.

Otra manera tambien podrias colocar un dato en la tabla Justificacion digamos "-" o sino "." y ese dato asignarle a la Tabla Asistencia para que se entienda que no tiene justificacion y asi evitarias el campo null.

Saludos
Gildus
__________________
.: Gildus :.
  #7 (permalink)  
Antiguo 29/11/2009, 14:47
 
Fecha de Ingreso: abril-2008
Mensajes: 21
Antigüedad: 16 años
Puntos: 0
Respuesta: Ayuda con el modelado de base de datos

Cita:
Iniciado por gildus Ver Mensaje
Entonces si podria usarse como foreignkey en la otra tabla de asistencia, y si podrias ponersele null si en caso de no que se asigne, ademas no seria una buena practica relacionarlo sino como una tabla independiente ("Justificacion"), porque a la hora de indexarlo el IdJustificacion en Asistencia se te hara lento las busquedas usar datos null en campo siempre es lento nomucho que digamos ni capaz se note, pero mientras va creciendo los datos se notara un poco.

Otra manera tambien podrias colocar un dato en la tabla Justificacion digamos "-" o sino "." y ese dato asignarle a la Tabla Asistencia para que se entienda que no tiene justificacion y asi evitarias el campo null.

Saludos
Gildus

Muchas gracias Gildus, me ha servido de mucho tu respuesta, creare la tabla Justificacion como independiente y le creare un trigger a la hora de insertar en la tabla Asistencias.

Saludos!!.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 02:35.