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

Creando base de datos

Estas en el tema de Creando base de datos en el foro de Mysql en Foros del Web. Hola . Es la primera vez que creo una base de datos usando "phpMyadmin". Resulta que he creado todas las tablas. El esquema es tal ...
  #1 (permalink)  
Antiguo 05/11/2008, 05:44
 
Fecha de Ingreso: mayo-2008
Mensajes: 75
Antigüedad: 15 años, 11 meses
Puntos: 0
Creando base de datos

Hola . Es la primera vez que creo una base de datos usando "phpMyadmin". Resulta que he creado todas las tablas. El esquema es tal que así:


Usuario (DNI_usuario, Tipo_usuario, Nombre, Apellidos, Pais, CP,
Direccion, Poblacion, Provincia, Email, Fecha_nacimiento, Password)

//Estos son los tipos de usuario

Administrador (DNI_usuario)

Medico (DNI_usuario)

*Lo subrrayado atributos clave.
*Lo negrita atributos heredados.


Mi duda es , despues de crearlos en MySQL si quisiera insertar un nuevo usuario y quiero que eso se vea reflejado en la tabla del Administrador, es decir, que herede el DNI_usuario automaticamente. ¿Se puede hacer eso retocando algo en la base de datos en MySQL? ¿O eso esta despues en la funcionalidad del programa?

Espero haberme explicado bien.
  #2 (permalink)  
Antiguo 05/11/2008, 06:25
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: Creando base de datos

Si tienes en cuenta que el mismo ID es PK en dos tablas distintas, no hay forma que puedas crear un trigger que actualice ninguna de las dos porque no tienes ningun dato en Usuario que determine eso (y no puedes enviarlo como parte del insert porque no pertenece a la tabla), entonces sólo te queda cargar directamente el dato con un INSERT a nivel programático.

En realidad los esquemas de tablas de ese tipo suelen abarcar tres tablas, pero siendo elas: USUARIO, CARGO y ASIGNACION, para el caso de que cada usuario pueda tener varios cargos (relación N:N), o de dos tablas (USUARIO y CARGO) si sólo pueden tener uno (Relación 1:N)

Esto significaría algo así:

Caso 1:

USUARIO(DNI_usuario, Tipo_usuario, Nombre, Apellidos, Pais, CP,
Direccion, Poblacion, Provincia, Email, Fecha_nacimiento, Password)

ASIGNACION(DNI_usuario, ID_Cargo)

CARGO(DNI_ID_CArgo, NombreCargo)
En este caso la consulta debe cruzar las tres tablas para darte qué usuarios son Médicos y cuáles Administrativos. La ventaja es que Tiene más flexibilidad en cuanto a los cargos, pero requiere llenado de la tabla CARGO primero y dos INSERT todas las veces.

Caso 2:

USUARIO(DNI_usuario, Tipo_usuario, Nombre, Apellidos, Pais, CP,
Direccion, Poblacion, Provincia, Email, Fecha_nacimiento, Password, ID_Cargo)

CARGO(ID_CArgo, NombreCargo)

Este caso es más simple: Sólo cruza dos tablas. Pero un usuario sólo puede ser Administrativo o Medico. No ambos. La ventaja es Que sólo debes insertar a los usuarios y el cargo queda en ese momento establecido sin otro INSERT. La tabla CARGO , por su parte, se carga sólo una vez y sufre pocas modificaciones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 07/11/2008 a las 09:02
  #3 (permalink)  
Antiguo 07/11/2008, 07:19
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Creando base de datos

Cita:
...
Caso 2:

USUARIO(DNI_usuario, Tipo_usuario, Nombre, Apellidos, Pais, CP,
Direccion, Poblacion, Provincia, Email, Fecha_nacimiento, Password, ID_Cargo)

CARGO(DNI_ID_CArgo, NombreCargo)

Este caso es más simple: Sólo cruza dos tablas. Pero un usuario sólo puede ser Administrativo o Medico. No ambos. La ventaja es Que sólo debes insertar a los usuarios y el cargo queda en ese momento establecido sin otro INSERT. La tabla CARGO , por su parte, se carga sólo una vez y sufre pocas modificaciones.
Habria una tercera solución más simple aún


USUARIO(DNI_usuario, Tipo_usuario, Nombre, Apellidos, Pais, CP,
Direccion, Poblacion, Provincia, Email, Fecha_nacimiento, Password, ID_Cargo)

Tipo_usuario fk referida a idTipousuario

TIPOUSUARIO(idTipo,NombreTipo)

TIPOUSUARIO
idTipo:NombreTipo
1:::::::Administrador
2:::::::Medico

o una cuarta más simple aún

USUARIO(DNI_usuario, Tipo_usuario, Nombre, Apellidos, Pais, CP,
Direccion, Poblacion, Provincia, Email, Fecha_nacimiento, Password, ID_Cargo)


donde se define Tipo_usuario como enum('Administrador','Medico') al crear la tabla.


Estas siempre para el caso en que un usuario puede ser de uno y solo un tipo.

Quim

Última edición por quimfv; 11/11/2008 a las 02:11
  #4 (permalink)  
Antiguo 07/11/2008, 09:05
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: Creando base de datos

Quimfv:
Cita:
Habria una tercera solución más simple aún


USUARIO(DNI_usuario, Tipo_usuario, Nombre, Apellidos, Pais, CP,
Direccion, Poblacion, Provincia, Email, Fecha_nacimiento, Password, ID_Cargo)

Tipo_usuario fk referida a idTipousuario

TIPOUSUARIO(idTipo,NombreTipo)

TIPOUSUARIO
idTipo:NombreTipo
1:::::::Administrador
2:::::::Medico
Es lo mismo que esto:
Cita:
Caso 2:

USUARIO(DNI_usuario, Tipo_usuario, Nombre, Apellidos, Pais, CP,
Direccion, Poblacion, Provincia, Email, Fecha_nacimiento, Password, ID_Cargo)

CARGO(ID_CArgo, NombreCargo)
La cuarta opción tiene el problema que una modificación de la cantidad de opciones requiere la redefinición de la tabla es decir una modificación a la base, mientras que la anterior solamente agregar un registro.
Como opción es válida, pero traería dolores de cabeza de migración, full-backups y en el caso de transacciones remotas.
__________________
¿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 10/11/2008, 02:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Creando base de datos

Totalmente de acuerdo gnzsoloyo el caso 2 tuyo y 3 mio son iguales una vez corregido ...

CARGO(DNI_ID_CArgo, NombreCargo)

y seria la mejor opción.

Quim
  #6 (permalink)  
Antiguo 10/11/2008, 04:23
 
Fecha de Ingreso: mayo-2008
Mensajes: 75
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Creando base de datos

Muy bien , muchas gracias, pero en mi opinión me parece mejor la opción 4º. Ya que un usuario solo puede ser médico o administrador y no va a cambiar nunca o casi nunca su tipo de usuario a lo largo de la vida del sistema. ¿No?

Una pregunta ¿A que os referis cuando escribis "fk" o "PK"? No lo entiendo.
  #7 (permalink)  
Antiguo 10/11/2008, 05:45
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: Creando base de datos

PK es el acrónimo de PRIMARY KEY o clave primaria.
FK lo es de FOREIGN KEY, o clave foránea (externa, extranjera o ajena, como quieras llamarla).

En lo que respecta del ejemplo, el problema debes resolverlo analizando el modelo del negocio (Análisis de Sistema básico): ¿El usuario SOLAMENTE puede ser o médico o administrativo? ¿No existe NINGUN caso en que la persona cumpla funciones de médico Y de administrativo? Entonces hazlo de esa forma.

Pero, si por cualquier razón el sistema requerirá a futuro un ajuste porque el rango de cargos de los usuarios se amplía (aunque fuese a un sólo cargo más), el modelo no te servirá. Tendrás que modificar la estructura de la tabla y resolver las inconsistencias de datos consecuentes A MANO.

Algunos sabios consejos que te dan los profesores:
- Tienes que preparar la base lo suficientemente flexible como para soportar todas las tonterías que puedan imaginar los programadores.
- Tienes que observar bien los datos que pretenden aportarte. Es posible que haya información relevante que no te están dando y después te pedirán que resuelvas.

Y el más fundamental:
- Diseña la base para el peor de los escenarios posibles. Siempre tendrás que agregar alguna cosa más, a último minuto, que a los analistas o a los programadores se les ocurrió.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 10/11/2008, 12:06
 
Fecha de Ingreso: mayo-2008
Mensajes: 75
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Creando base de datos

Ok. Muchas gracias por todo.
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 20:01.