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

Problema al crear tablas relacionadas

Estas en el tema de Problema al crear tablas relacionadas en el foro de Mysql en Foros del Web. Hola.. mis estimados.. he tenido un gran problema al crear las tablas de mi base de datos....estoy tratando de colocar FK a las tablas y ...
  #1 (permalink)  
Antiguo 26/09/2007, 13:12
 
Fecha de Ingreso: abril-2007
Mensajes: 43
Antigüedad: 17 años
Puntos: 0
Problema al crear tablas relacionadas

Hola.. mis estimados.. he tenido un gran problema al crear las tablas de mi base de datos....estoy tratando de colocar FK a las tablas y me arroja el siguiente error.. he leido bastante y cambiado mi script de base de datos y no logro crear mi base de datos .. si alguien sabe... le agradeceria mucho aqui voy adjuntar el script de mi base de datos.. y el error que me arroja...!
Cita:
-- phpMyAdmin SQL Dump
-- version 2.9.2
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generación: 25-09-2007 a las 23:37:57
-- Versión del servidor: 5.0.27
-- Versión de PHP: 4.4.5
--
-- Base de datos: `sistema`
-- --------------------------------------------------------
-- Estructura de tabla para la tabla `aula`
CREATE TABLE `aula` (
`CedulaD` int(11) NOT NULL,
`IdAula` int(11) NOT NULL auto_increment,
`NombreA` varchar(20) NOT NULL,
PRIMARY KEY (`IdAula`),
INDEX (`CedulaD`),
FOREIGN KEY (`CedulaD`) REFERENCES `docente` (`CedulaD`)

) ENGINE=InnoDB;

-- Volcar la base de datos para la tabla `aula`
-- --------------------------------------------------------
-- Estructura de tabla para la tabla `boletin`

CREATE TABLE `boletin` (
`CedulaD` int(11) NOT NULL,
`IdInfante` int(11) NOT NULL,
`CedulaR` int(11) NOT NULL,
`IdBoletin` int(11) NOT NULL auto_increment,
`LogrosAlcanzados` varchar(500) NOT NULL,
`Fecha` datetime NOT NULL,
PRIMARY KEY (`IdBoletin`),
INDEX (`CedulaD`),
FOREIGN KEY (`CedulaD`) REFERENCES docente(`CedulaD`),
INDEX (`IdInfante`),
FOREIGN KEY (`IdInfante`) REFERENCES infante(`IdInfante`)


) ENGINE=InnoDB;
-- Volcar la base de datos para la tabla `boletin`
-- --------------------------------------------------------
-- Estructura de tabla para la tabla `cita`

CREATE TABLE `cita` (
`CedulaD` int(11) NOT NULL,
`IdCita` int(11) NOT NULL auto_increment,
`Observacion` varchar(500) NOT NULL,
`FechaColocada` datetime NOT NULL,
`FechaCita` date NOT NULL,
`CedulaR` varchar(20) NOT NULL,
PRIMARY KEY (`IdCita`),
INDEX (`CedulaR`),
FOREIGN KEY (`CedulaR`) REFERENCES representante(`CedulaR`),
INDEX (`CedulaD`),
FOREIGN KEY (`CedulaD`) REFERENCES docente(`CedulaD`)

) ENGINE=InnoDB;

-- Volcar la base de datos para la tabla `cita`
-- --------------------------------------------------------
-- Estructura de tabla para la tabla `controlboletincita`

CREATE TABLE `controlboletincita` (
`IdBoletin` int(11) NOT NULL,
`IdCita` int(11) NOT NULL,
INDEX (`IdBoletin`),
FOREIGN KEY (`IdBoletin`) REFERENCES boletin(`IdBoletin`),
INDEX (`IdCita`),
FOREIGN KEY (`IdCita`) REFERENCES cita(`IdCita`)

) ENGINE=InnoDB;

-- Volcar la base de datos para la tabla `controlboletincita`
-- --------------------------------------------------------
-- Estructura de tabla para la tabla `docente`
--
CREATE TABLE `docente` (
`CedulaD` int(11) NOT NULL,
`Nombre` varchar(20) NOT NULL,
`Apellido` varchar(20) NOT NULL,
`FechaNacimiento` date NOT NULL,
`Direccion` varchar(100) NOT NULL,
`Telefono` int(11) NOT NULL,
`Celular` int(11) default NULL,
`Email` varchar(50) default NULL,
`GradoInstruccion` varchar(20) NOT NULL,
`Especialidad` varchar(20) default NULL,
`ExperienciaLaboral` varchar(100) default NULL,
`Sexo` varchar(20) NOT NULL,
`Imagen` varchar(100) default NULL,
PRIMARY KEY (`CedulaD`)
) ENGINE=InnoDB;

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


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

--
-- Estructura de tabla para la tabla `infante`
--

CREATE TABLE `infante` (
`IdInfante` int(11) NOT NULL auto_increment,
`CedulaR` int(11) NOT NULL,
`Nombre` varchar(20) NOT NULL,
`Apellido` varchar(20) NOT NULL,
`FechaNacimiento` date NOT NULL,
`LugarNacimiento` varchar(20) NOT NULL,
`Sexo` varchar(10) NOT NULL,
`TallaCamisa` varchar(20) NOT NULL,
`TallaPantalon` varchar(20) NOT NULL,
`TallaCalzado` varchar(20) NOT NULL,
`ProcedenciaPreescolar` varchar(20) default NULL,
`Imagen` varchar(100) default NULL,
PRIMARY KEY (`IdInfante`),
INDEX (`CedulaR`),
FOREIGN KEY (`CedulaR`) REFERENCES representante(`CedulaR`)
) ENGINE=InnoDB;

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

-- Estructura de tabla para la tabla `inscripcion`

CREATE TABLE `inscripcion` (
`IdInfante` int(11) NOT NULL,
`IdInscripcion` int(11) NOT NULL auto_increment,
`Nivel` varchar(20) NOT NULL,
`FechaInscripcion` datetime NOT NULL,
`AnoEscolar` varchar(20) NOT NULL,
PRIMARY KEY (`IdInscripcion`),
INDEX (`IdInfante`),
FOREIGN KEY (`IdInfante`) REFERENCES infante(`IdInfante`)
) ENGINE=InnoDB;

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


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

--
-- Estructura de tabla para la tabla `lapso`
--

CREATE TABLE `lapso` (
`IdLapso` int(11) NOT NULL auto_increment,
`Fecha` varchar(9) NOT NULL,
PRIMARY KEY (`IdLapso`)
) ENGINE=InnoDB;

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


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

--
-- Estructura de tabla para la tabla `menu`
--

CREATE TABLE `menu` (
`IdMenu` int(11) NOT NULL auto_increment,
`DescripcionMenu` varchar(20) NOT NULL,
PRIMARY KEY (`IdMenu`)
) ENGINE=InnoDB;

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


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

--
-- Estructura de tabla para la tabla `opciones`
--

CREATE TABLE `opciones` (
`IdOpcion` int(11) NOT NULL auto_increment,
`IdMenu` int(11) NOT NULL,
`DescripcionOpcion` varchar(20) NOT NULL,
`LinkOpcion` varchar(100) NOT NULL,
PRIMARY KEY (`IdOpcion`),
INDEX (`IdMenu`),
FOREIGN KEY (`IdMenu`) REFERENCES menu(`IdMenu`)
) ENGINE=InnoDB;

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


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

--
-- Estructura de tabla para la tabla `representante`
--

CREATE TABLE `representante` (
`CedulaR` int(11) NOT NULL,
`Nombre` varchar(20) NOT NULL,
`Apellido` varchar(20) NOT NULL,
`FechaNacimiento` date NOT NULL,
`Direccion` varchar(100) NOT NULL,
`Telefono` varchar(20) NOT NULL,
`Celular` varchar(20) default NULL,
`Email` varchar(20) default NULL,
`NivelInstruccion` varchar(100) NOT NULL,
`Ocupacion` varchar(100) NOT NULL,
`NombreEmpresa` varchar(20) default NULL,
`DireccionEmpresa` varchar(100) default NULL,
`NombrePersonaExtra` varchar(50) NOT NULL,
`Sexo` varchar(20) NOT NULL,
`Imagen` varchar(100) default NULL,
`TParentesco` varchar(40) NOT NULL,
PRIMARY KEY (`CedulaR`)
) ENGINE=InnoDB;

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


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

--
-- Estructura de tabla para la tabla `rol`
--

CREATE TABLE `rol` (
`Entidad` int(11) unsigned NOT NULL,
`DescripcionRol` varchar(45) NOT NULL,
PRIMARY KEY (`Entidad`)
) ENGINE=InnoDB;

--
-- Volcar la base de datos para la tabla `rol`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `rolopciones`
--

CREATE TABLE `rolopciones` (
`Entidad` int(11) NOT NULL,
`IdOpcion` int(11) NOT NULL,
INDEX (`Entidad`),
FOREIGN KEY (`Entidad`) REFERENCES rol(`Entidad`),
INDEX (`IdOpcion`),
FOREIGN KEY (`IdOpcion`) REFERENCES opciones(`IdOpcion`)
) ENGINE=InnoDB;
--
-- Volcar la base de datos para la tabla `rolopciones`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `turno`
--

CREATE TABLE `turno` (
`CedulaD` int(11) NOT NULL,
`IdAula` int(11) NOT NULL,
`IdTurno` int(11) NOT NULL auto_increment,
`NombreTurno` varchar(20) NOT NULL,
PRIMARY KEY (`IdTurno`),
INDEX (`CedulaD`),
FOREIGN KEY (`CedulaD`) REFERENCES docente(`CedulaD`),
INDEX (`IdAula`),
FOREIGN KEY (`IdAula`) REFERENCES aula(`IdAula`)
) ENGINE=InnoDB;

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

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

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

CREATE TABLE `usuarios` (
`IdUsuario` int(11) NOT NULL auto_increment,
`Entidad` int(11) NOT NULL,
`usuario` varchar(20) NOT NULL,
`clave` varchar(20) NOT NULL,
`FRegistro` datetime NOT NULL,
`status` varchar(20) character set utf8 collate utf8_bin NOT NULL,
`Nombre` varchar(45) NOT NULL,
`Apellido` varchar(45) NOT NULL,
PRIMARY KEY (`IdUsuario`),
INDEX (`Entidad`),
FOREING KEY (`Entidad`) REFERENCES rol(`Entidad`)

) ENGINE=InnoDB;
--
-- Volcar la base de datos para la tabla `usuarios`
--
y este el error que me da cuando importo el script

Cita:
Error
consulta SQL:

-- phpMyAdmin SQL Dump
-- version 2.9.2
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tiempo de generaci�n: 25-09-2007 a las 23:37:57
-- Versi�n del servidor: 5.0.27
-- Versi�n de PHP: 4.4.5
--
-- Base de datos: `sistema`
--
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `aula`
--
CREATE TABLE `aula` (

`CedulaD` int( 11 ) NOT NULL ,
`IdAula` int( 11 ) NOT NULL AUTO_INCREMENT ,
`NombreA` varchar( 20 ) NOT NULL ,
PRIMARY KEY ( `IdAula` ) ,
INDEX ( `CedulaD` ) ,
FOREIGN KEY ( `CedulaD` ) REFERENCES `docente` ( `CedulaD` )
) ENGINE = InnoDB;



MySQL ha dicho:

#1005 - Can't create table '.\septiembre\aula.frm' (errno: 150)




POr favor.. si alguien me puede guiar o recomendarme unos manuales.. estaria agradecido..!!

Saludos desde Venezuela..!
  #2 (permalink)  
Antiguo 26/09/2007, 14:44
Avatar de kunndry  
Fecha de Ingreso: abril-2004
Ubicación: Alicante / España
Mensajes: 247
Antigüedad: 20 años
Puntos: 0
Re: Problema al crear tablas relacionadas

El problema esta en que creas la tabla aula antes que docente, y al haber una restricción y no exisitir la tabla docente, no se puede crear.

Tienes dos opciones, mirar si puedes cambiar el orden de creación de las tablas, o añadir las restricciones al final, con ALTER TABLE.
  #3 (permalink)  
Antiguo 26/09/2007, 15:22
 
Fecha de Ingreso: abril-2007
Mensajes: 43
Antigüedad: 17 años
Puntos: 0
Re: Problema al crear tablas relacionadas

hola kunndry.. gracias por tu comentario... sabes inverti la estructura de la bese de datos.. osea coloque primero las tablas padres.. y luego las tablas hijos y ahora me da error en las tablas donde coloco 2 FK..

ahora bien la segunda alternativa que me das tendre que colocar en las tablas las FK como key.. y luego hago el alter table??

lo que pasa es que estoy novato en esto..!
  #4 (permalink)  
Antiguo 26/09/2007, 16:00
Avatar de kunndry  
Fecha de Ingreso: abril-2004
Ubicación: Alicante / España
Mensajes: 247
Antigüedad: 20 años
Puntos: 0
Re: Problema al crear tablas relacionadas

La idea es que no pongas ningun FK, solo claves primarias y una vez que ya estan todas creadas, añades las claves ajenas (FK)

Si no recuerdo mal la sintaxis es esta:

Código:
ALTER TABLE nombreTabla ADD CONSTRAINT nombreRestricción FOREIGN KEY columna1,... REFERENCES columnaReferenciada
Creo que falta algun parentesis pero en esencia es eso.

Te dejo un enlace a la definición del ALTER TABLE de mysql
http://dev.mysql.com/doc/refman/5.0/es/alter-table.html
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 17:38.