Stack Overflow en español Asked by ADRIAN LEON ORTEGA on December 25, 2020
Estoy haciendo un script sobre una libreria y todas las tablas estan relacionadas, me crea la base de datos correctamente pero de ejecutar la parte del Alter presenta problema en uno que corresponde a la tabla LibrosEstado:
create database libreria;
use libreria;
create table LibrosEstado(
EstadoLibroID char(8) primary key,
NombreEdo varchar(15) not null,
Descripcion varchar(25) null);
create table Libro(
LibroID char(8) primary key,
Titulo varchar(30) not null,
Editorial varchar(20) not null,
Seccion varchar(25) not null,
FechaPublicacion date null,
FechaEdicion date null,
PrecioEntrada float(4) not null,
PrecioSalida float(4) not null,
EstadoLibroID char(8) not null,
Venido bit(1) not null);
create table Autor(
AutorID char(8) primary key,
Nombre varchar(25) null,
Apellido varchar(25) not null,
PaisOrigen varchar(20) null,
Nacio int(4) null,
Murio int(4) null,
Descripcion varchar(50) null);
create table AutorLibro(
AutorID char(8) primary key,
LibroID char(8) not null);
create table cargo(
CargoID char(8) primary key,
Cargo varchar(20) not null,
Descripcion varchar(50) null);
create table Empleado(
EmpleadoID char(8) primary key,
Nombre varchar(25) null,
Apellido varchar(25) null,
Direccion varchar(50) null,
Ciudad varchar(20) null,
Estado varchar(20) null,
CP char(5) null,
Telefono varchar(20) null,
FechaIngreso date null,
CargoID char(8) null);
create table FormaPago(
FormaPagoID char(8) primary key,
Descripcion varchar(50) null);
create table OrdenEstado(
EstadoOrdenID char(8) primary key,
Descripcion varchar(50) null);
create table Cliente(
ClienteID char(10) primary key,
Nombre varchar(25) not null,
Apellido varchar(25) not null,
Telefono varchar(20) null,
Direccion varchar(50) null,
Ciudad varchar(20) null,
Estado varchar(20) null,
CP char(5) not null);
create table Orden(
OrdenID char(8) primary key,
EmpleadoID char(8) null,
ClienteID char(8) null,
FechaOrden date null,
FechaEnvio date not null,
MontoVenta float null,
FormaPagoID char(8) null,
EstadoOrdenID char(8) null);
create table OrdenLibro(
OrdenID char(8) primary key,
LibroID char(8) not null);
alter table AutorLibro add foreign key (LibroID) references Libro (LibroID);
alter table LibrosEstado add foreign key (EstadoLibroID) references Libro (EstadoLibroID);
alter table AutorLibro add foreign key (AutorID) references Autor (AutorID);
alter table OrdenLibro add foreign key (LibroID) references Libro (LibroID);
alter table OrdenLibro add foreign key (OrdenID) references Orden (OrdenID);
alter table OrdenLibro add foreign key (LibroID) references Libro (LibroID);
alter table Orden add foreign key (ClienteID) references Cliente (ClienteID);
alter table Empleado add foreign key (CargoID) references Cargo (CargoID);
alter table Orden add foreign key (EstadoOrdenID) references OrdenEstado (EstadoOrdenID);
alter table Orden add foreign key (FormaPagoID) references FormaPago (FormaPagoID);
y me aparece el siguiente error:
“alter table LibrosEstado add foreign key (EstadoLibroID) references
Libro (EstadoLibroID) Error Code: 1822. Failed to add the foreign key
constraint. Missing index for constraint ‘librosestado_ibfk_1’ in the
referenced table ‘libro'”
He intentado hacer varios cambios y pero no consigo arreglar ese error, ni ingresar los datos de ninguna tabla me permite hasta que este correctamente esa parte del codigo
De esta manera este error es relacionado a que primero creas la tabla LibrosEstado y luego la tabla Libro cuando debería ser al revés por que tu llave foránea que vive en LibrosEstado apunta a la declaración de una tabla que aún no existe, en este caso Libro.
El ALTER TABLE donde agregas la llave foránea que vincula LibrosEstado con Libro tiene el error de que la misma llave foránea que declaras des decir su nombre, es el mismo nombre de columna que usas para indicar la llave primaria; es decir con la llave foránea de LibrosEstado estas apuntando a la llave primaria de la misma tabla LibrosEstado cuando debería ser a la columna LibroID
Answered by ISABEL BOTELLO MANCILLA on December 25, 2020
Tienes los siguientes errores:
LibrosEstado
y luego la tabla Libro
cuando debería ser al revés por que tu llave foránea que vive en LibrosEstado
apunta a la declaración de una tabla que aún no existe, en este caso Libro
.ALTER TABLE
donde agregas la llave foránea que vincula LibrosEstado
con Libro
tiene el error de que la misma llave foránea que declaras des decir su nombre, es el mismo nombre de columna que usas para indicar la llave primaria; es decir con la llave foránea de LibrosEstado
estas apuntando a la llave primaria de la misma tabla LibrosEstado
cuando debería ser a la columna LibroID
SCRIPT CORREGIDO
create database libreria;
use libreria;
create table Libro(
LibroID char(8) primary key,
Titulo varchar(30) not null,
Editorial varchar(20) not null,
Seccion varchar(25) not null,
FechaPublicacion date null,
FechaEdicion date null,
PrecioEntrada float(4) not null,
PrecioSalida float(4) not null,
EstadoLibroID char(8) not null,
Venido bit(1) not null);
create table LibrosEstado(
EstadoLibroID char(8) primary key,
NombreEdo varchar(15) not null,
Descripcion varchar(25) null);
create table Autor(
AutorID char(8) primary key,
Nombre varchar(25) null,
Apellido varchar(25) not null,
PaisOrigen varchar(20) null,
Nacio int(4) null,
Murio int(4) null,
Descripcion varchar(50) null);
create table AutorLibro(
AutorID char(8) primary key,
LibroID char(8) not null);
create table Cargo(
CargoID char(8) primary key,
Cargo varchar(20) not null,
Descripcion varchar(50) null);
create table Empleado(
EmpleadoID char(8) primary key,
Nombre varchar(25) null,
Apellido varchar(25) null,
Direccion varchar(50) null,
Ciudad varchar(20) null,
Estado varchar(20) null,
CP char(5) null,
Telefono varchar(20) null,
FechaIngreso date null,
CargoID char(8) null);
create table FormaPago(
FormaPagoID char(8) primary key,
Descripcion varchar(50) null);
create table OrdenEstado(
EstadoOrdenID char(8) primary key,
Descripcion varchar(50) null);
create table Cliente(
ClienteID char(10) primary key,
Nombre varchar(25) not null,
Apellido varchar(25) not null,
Telefono varchar(20) null,
Direccion varchar(50) null,
Ciudad varchar(20) null,
Estado varchar(20) null,
CP char(5) not null);
create table Orden(
OrdenID char(8) primary key,
EmpleadoID char(8) null,
ClienteID char(8) null,
FechaOrden date null,
FechaEnvio date not null,
MontoVenta float null,
FormaPagoID char(8) null,
EstadoOrdenID char(8) null);
create table OrdenLibro(
OrdenID char(8) primary key,
LibroID char(8) not null);
alter table AutorLibro add foreign key (LibroID) references Libro (LibroID);
alter table LibrosEstado add foreign key (EstadoLibroID) references Libro (LibroID);
alter table AutorLibro add foreign key (AutorID) references Autor (AutorID);
alter table OrdenLibro add foreign key (LibroID) references Libro (LibroID);
alter table OrdenLibro add foreign key (OrdenID) references Orden (OrdenID);
alter table OrdenLibro add foreign key (LibroID) references Libro (LibroID);
alter table Orden add foreign key (ClienteID) references Cliente (ClienteID);
alter table Empleado add foreign key (CargoID) references Cargo (CargoID);
alter table Orden add foreign key (EstadoOrdenID) references OrdenEstado (EstadoOrdenID);
alter table Orden add foreign key (FormaPagoID) references FormaPago (FormaPagoID);
Answered by BetaM on December 25, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP