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

relacion de base de datos

Estas en el tema de relacion de base de datos en el foro de Mysql en Foros del Web. estoy realizando un pequeño proyecto con una base de datos pero he tenido problemas, en cuestion de enlazar diferentes campos (la pregunta es ¿que tablas ...
  #1 (permalink)  
Antiguo 01/10/2010, 11:22
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 13 años, 6 meses
Puntos: 0
Exclamación relacion de base de datos

estoy realizando un pequeño proyecto con una base de datos pero he tenido problemas, en cuestion de enlazar diferentes campos (la pregunta es ¿que tablas se enlazan y porque campos?), algunos si son simples y ya he ligado, pero la opinion de los demas tambien es positiva


CREATE TABLE IF NOT EXISTS `administrador` (
`id_administrador` int(15) NOT NULL,
`nombre` varchar(30) NOT NULL,
PRIMARY KEY (`id_administrador`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


CREATE TABLE IF NOT EXISTS `alumnos` (
`id_alumno` int(15) NOT NULL,
`nombre` varchar(30) NOT NULL,
`apellido` varchar(30) NOT NULL,
`direccion` varchar(45) NOT NULL,
`semestre` int(1) NOT NULL,
`grupo` varbinary(1) NOT NULL,
`email` varchar(30) NOT NULL,
`telefono` varchar(20) NOT NULL,
PRIMARY KEY (`id_alumno`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


CREATE TABLE IF NOT EXISTS `aula` (
`id_aula` int(15) NOT NULL,
`nombre` varchar(20) NOT NULL,
PRIMARY KEY (`id_aula`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `calificacion` (
`id_calificacion` int(15) NOT NULL,
`calificacion_parc` varchar(10) NOT NULL,
`calificacion_final` int(10) NOT NULL,
`id_tipo_calificacion` varchar(15) NOT NULL,
PRIMARY KEY (`id_tipo_calificacion`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `docentes` (
`id_docente` int(15) NOT NULL,
`nombre` varchar(30) NOT NULL,
`apellido` varchar(30) NOT NULL,
`domicilio` varchar(45) NOT NULL,
`email` varchar(30) NOT NULL,
`telefono` varbinary(17) NOT NULL,
PRIMARY KEY (`id_docente`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


CREATE TABLE IF NOT EXISTS `grupo` (
`id_grupo` int(15) NOT NULL,
`id_docente` int(15) NOT NULL,
`id_materia` int(15) NOT NULL,
`id_aula` int(15) NOT NULL,
`grupo` varchar(1) NOT NULL,
`semestre` varchar(1) NOT NULL,
`periodo` int(1) NOT NULL,
`año` int(10) NOT NULL,
PRIMARY KEY (`id_grupo`),
KEY `id_docente` (`id_docente`),
KEY `id_materia` (`id_materia`),
KEY `id_aula` (`id_aula`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `listas` (
`id_lista` int(15) NOT NULL,
`id_grupo` int(1) NOT NULL,
`id_alumno` int(15) NOT NULL,
`id_calificacion` int(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


CREATE TABLE IF NOT EXISTS `materia` (
`id_materia` int(15) NOT NULL,
`nombre` varchar(30) NOT NULL,
`semestre` varchar(1) NOT NULL,
PRIMARY KEY (`id_materia`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;



-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `publicaciones`
--

CREATE TABLE IF NOT EXISTS `publicaciones` (
`id_publicacion` int(15) NOT NULL,
`id_docente` int(15) NOT NULL,
`descripcion` varchar(30) NOT NULL,
`fecha_creacion` date NOT NULL,
`ruta_materia` varchar(10) NOT NULL,
PRIMARY KEY (`id_publicacion`),
KEY `id_docente` (`id_docente`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Volcar la base de datos para la tabla `publicaciones`
--


-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `tipo_calificacion`
--

CREATE TABLE IF NOT EXISTS `tipo_calificacion` (
`id_tipo_calificacion` int(15) NOT NULL,
`nombre` varchar(30) NOT NULL,
KEY `id_tipo_calificacion` (`id_tipo_calificacion`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Volcar la base de datos para la tabla `tipo_calificacion`
--


-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `tipo_usuario`
--

CREATE TABLE IF NOT EXISTS `tipo_usuario` (
`id_tipo_usuario` int(15) NOT NULL,
`nombre` varchar(30) NOT NULL,
KEY `id_tipo_usuario` (`id_tipo_usuario`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Volcar la base de datos para la tabla `tipo_usuario`
--

INSERT INTO `tipo_usuario` (`id_tipo_usuario`, `nombre`) VALUES
(1, 'administrador'),
(2, 'docente');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `usuarios`
--

CREATE TABLE IF NOT EXISTS `usuarios` (
`usuario` varchar(30) NOT NULL,
`clave` varchar(15) NOT NULL,
`id_tipo_usuario` int(15) NOT NULL,
PRIMARY KEY (`id_tipo_usuario`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Volcar la base de datos para la tabla `usuarios`
--

INSERT INTO `usuarios` (`usuario`, `clave`, `id_tipo_usuario`) VALUES
('administrador', 'admin', 1),
('docente', 'docente', 2);
  #2 (permalink)  
Antiguo 15/10/2010, 09:45
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: relacion de base de datos

me autorrespondo porque quizas no me entendieron, cambie tambien la base de datos, he realizado las relaciones de la tabla y espero que los moderadores del foro ahora si me ayuden en saber si estan correctas esas relaciones de campos en algunas tablas,
pero tambien me surge otra pregunta ¿para dar privilegios a usuarios solo es con el comando GRANT (revoke, insert, delete etc,) o existe otro comando o forma?
CREATE TABLE IF NOT EXISTS `calificacion` (
`id_calificacion` int(15) NOT NULL,
`calificacion_parc1` varchar(10) NOT NULL,
`calificacion_parc2` varchar(10) NOT NULL,
`calificacion_parc3` varchar(10) NOT NULL,
`lista_id_lista` int(15) NOT NULL,
PRIMARY KEY (`id_calificacion`),
KEY `lista_id_lista` (`lista_id_lista`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


CREATE TABLE IF NOT EXISTS `grupo` (
`id_grupo` int(15) NOT NULL,
`tipo_usuario` varchar(15) NOT NULL,
`id_materia` int(15) NOT NULL,
`grupo` varchar(1) NOT NULL,
`semestre` varchar(1) NOT NULL,
`periodo` int(1) NOT NULL,
`year` int(10) NOT NULL,
PRIMARY KEY (`id_grupo`),
KEY `id_docente` (`tipo_usuario`),
KEY `id_materia` (`id_materia`),
KEY `id_materia_2` (`id_materia`),
KEY `id_docente_2` (`tipo_usuario`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


CREATE TABLE IF NOT EXISTS `listas` (
`id_lista` int(15) NOT NULL,
`id_grupo` int(1) NOT NULL,
`tipo_usuario` varchar(15) NOT NULL,
`id_calificacion` int(10) NOT NULL,
`calificacion_final` decimal(9,2) NOT NULL,
`id_tipo_calificacion` varchar(15) NOT NULL,
PRIMARY KEY (`id_lista`),
KEY `id_grupo` (`id_grupo`),
KEY `id_alumno` (`tipo_usuario`),
KEY `id_tipo_calificacion` (`id_tipo_calificacion`),
KEY `id_tipo_calificacion_2` (`id_tipo_calificacion`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


CREATE TABLE IF NOT EXISTS `materia` (
`id_materia` int(15) NOT NULL,
`nombre` varchar(30) NOT NULL,
`semestre` varchar(1) NOT NULL,
PRIMARY KEY (`id_materia`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


CREATE TABLE IF NOT EXISTS `publicaciones` (
`id_publicacion` int(15) NOT NULL,
`tipo_usuario` varchar(15) NOT NULL,
`descripcion` varchar(30) NOT NULL,
`fecha_creacion` date NOT NULL,
`ruta_materia` varchar(10) NOT NULL,
PRIMARY KEY (`id_publicacion`),
KEY `id_docente` (`tipo_usuario`),
KEY `id_docente_2` (`tipo_usuario`),
KEY `id_docente_3` (`tipo_usuario`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


CREATE TABLE IF NOT EXISTS `tipo_calificacion` (
`id_tipo_calificacion` int(15) NOT NULL,
`nombre` varchar(30) NOT NULL,
PRIMARY KEY (`id_tipo_calificacion`),
KEY `id_tipo_calificacion` (`id_tipo_calificacion`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


CREATE TABLE IF NOT EXISTS `usuarios` (
`usuario` varchar(30) NOT NULL,
`clave` varchar(15) NOT NULL,
`nombre` varchar(45) NOT NULL,
`apellido` varchar(45) NOT NULL,
`direccion` varchar(45) NOT NULL,
`tel_particular` varchar(15) NOT NULL,
`tel_cel` varchar(15) NOT NULL,
`email` varchar(30) NOT NULL,
`tipo_usuario` varchar(15) NOT NULL,
PRIMARY KEY (`tipo_usuario`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

las relaciones son las sig:
grupo.id_grupo con listas.id_grupo
materia.id_materia congrupo.id_materia
publicaciones.tipo_usuario con usuarios.tipo_usuario
usuarios.tipo_usuario con listas.tipo_usuario
tipo_calificacion.id_tipo_calificacion con listas-id_tipo_calificacion
calificacion.id_lista con listas.id_listas
  #3 (permalink)  
Antiguo 15/10/2010, 11:12
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: relacion de base de datos

Cita:
me autorrespondo porque quizas no me entendieron, cambie tambien la base de datos, he realizado las relaciones de la tabla y espero que los moderadores del foro ahora si me ayuden en saber si estan correctas esas relaciones de campos en algunas tablas,
No se pueden crear relaciones de FOREIGN KEY con tablas MyISAM. Si quieres crear una base de datos relacional debes usar InnoDB.
Cita:
pero tambien me surge otra pregunta ¿para dar privilegios a usuarios solo es con el comando GRANT (revoke, insert, delete etc,) o existe otro comando o forma?
Eso es una pregunta de manual: No. No existe ninguna otra forma de dar privilegios a los usuarios. ¿Para qué existiría? No tendría ninguna utilidad.
Si existe otra forma, pero para ello tienes que tener los privilegios de root., y de toidos modos lo único que logras es generar en MySQL los mismos cambios que implementa GRANT, pero en forma manual... O sea: ¿para qué?

5.7. Gestión de la cuenta de usuario MySQL
13.5.1.3. Sintaxis de GRANT y REVOKE
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 15/10/2010, 12:35
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: relacion de base de datos

gracias por recordarme lo de innoDB se me paso, lo segundo es que los privilegios son para consultas en otro lenguaje (php), aun asi me gustaria que los mederadores u otras personas checaran las relaciones entre tablas

de todas formas se te agradece y es verdad "¡hay que aprender de nuestros errores!"
  #5 (permalink)  
Antiguo 15/10/2010, 13:54
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: relacion de base de datos

Cita:
lo segundo es que los privilegios son para consultas en otro lenguaje (php)
No me consta que los lenguajes de programación cuenten con privilegios de usuario o formas de acceder a los mismos en los diferentes sistemas.
Los privilegios son en realidad asunto de los sistemas operativos (Basados en Unix como por ejemplo Linux, Solaris, etc., o bien de Windows basados en NT), o bien de las bases de datos y/o aplicaciones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 18/10/2010, 08:51
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: relacion de base de datos

se te agradece, y si lo entiendo, pero los privilegios fue algo que me acaban de decir
y queria ver si eran en las consultas sql dentro de php

cito: la base de datos la requiero para un sistema de paginas web en php, donde los usuarios tengan los privilegios de acceder, borrar, ver, por ello la sintaxis GRANT y REVOKE
atravez de un servidor linux (ubuntu server)
  #7 (permalink)  
Antiguo 18/10/2010, 09:09
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: relacion de base de datos

Cita:
cito: la base de datos la requiero para un sistema de paginas web en php, donde los usuarios tengan los privilegios de acceder, borrar, ver, por ello la sintaxis GRANT y REVOKE
atravez de un servidor linux (ubuntu server)
Esos niveles de permisos los gestionas en el MySQL, ya no en el S.O., puesto que los usuarios en cuestión no accederán al servidor en sí, sino a las páginas, y son los scripts del PHP los que generan y administran la conexión con la base; por tanto, sólo necesitas administrar los permisos de MySQL.
El problema es que sólo podrás usar GRANT o REVOKE si y sólo si el servidor de MySQL es tuyo, o bien si el proveedor de hosting (si es contratado), te ha dado un user que tenga privilegios de crear usuarios. Caso contrario, no podrás hacer nada.
El tema es así: Los hosting, cuando son servicios contratados sin host dedicado, te proveen un numero limitado de usuarios, ninguno de los cuales tiene el permiso de GRANT OPTION, por lo que no te dejan crear usuarios en MyQL. Eso lo hacen por cuestiones de seguridad, ya que el servidor MySQL en ese caso es compartido.
Lo que te resta en ese caso es crear un subsistema de gestion de usuarios y permisos en tu base, con tablas propias y atributos propios, manejando el permiso de acceso a los recursos de la web por medio de los scripts de PHP. Eso es lo que se suele hacer.

Si y sólo si el servidor de host es tuyo, o bien tienes un servidor dedicado, entonces puedes llegar a tener un user tal que puedas crear usuarios y darles permisos con GRANT.

¿Se entiende la idea?
__________________
¿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 18/10/2010, 11:34
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: relacion de base de datos

me sirve de mucho tu aporte, deja lo checo a ver que puedo hacer y se te agracece de nuevo
  #9 (permalink)  
Antiguo 03/11/2010, 10:13
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: relacion de base de datos

ya cheque los privilegios, el gran y revoke y tenias razon, gnzsoloyo, aun continuo con las relaciones de la base de datos, a continuacion las relaciones que cree,

Calificacion id_lista con listas.id_listas

Grupo tipo_usuario con tipo_usuario.tipo_usuario
Grupo id_materia con materia.id_materia

Listas.id_grupo con grupo_id_grupo
Id_tipo_calificacion con tipo_calificacion.id_tipo_calificacion

Publicaciones.tipo_usaurio con tipo_usuario.tipo_usuario
Usuario.tipo_usuario con tipo_usuario.tipo_usuario

me gustaria que me dijeran si son correctas o
espero me den mas tips y sugerencias para completar mi base de datos

Etiquetas: relacion
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 21:49.