gpt4 book ai didi

mysql - mysql数据库结构问题

转载 作者:行者123 更新时间:2023-11-29 14:45:36 25 4
gpt4 key购买 nike

我的数据库结构有问题。

我想知道为什么MYSQL会产生以下错误:

#1005 - 无法创建表“test.panier”(错误号:150)变量的名称并不重要......它只是结构

这是我的 sql 文件。

DROP TABLE IF EXISTS Panier;
DROP TABLE IF EXISTS Materiel;
DROP TABLE IF EXISTS Medicament;
DROP TABLE IF EXISTS Produit;
DROP TABLE IF EXISTS ListePatient;
DROP TABLE IF EXISTS Patient;
DROP TABLE IF EXISTS Specialiste;
DROP TABLE IF EXISTS TelPers;
DROP TABLE IF EXISTS Personne;
DROP TABLE IF EXISTS Telephone;
DROP TABLE IF EXISTS Adresse;

CREATE TABLE Panier(
idPanier INT(5) NOT NULL,
idProduit INT(100) NOT NULL,
PRIMARY KEY (`idPanier`,`idProduit`),
FOREIGN KEY(idPanier) REFERENCES Specialiste(idPanier),
FOREIGN KEY(idProduit) REFERENCES Produit(idProduit)
)ENGINE=InnoDB;

CREATE TABLE Adresse(
idAdresse INT(100) NOT NULL PRIMARY KEY AUTO_INCREMENT,
num INT(5) NOT NULL,
rue VARCHAR(30) NOT NULL,
ville VARCHAR(15) NOT NULL,
postal VARCHAR(6) NOT NULL
)ENGINE=InnoDB;

CREATE TABLE Telephone(
idTel INT(100) NOT NULL PRIMARY KEY AUTO_INCREMENT,
typeTel VARCHAR(15) NOT NULL,
ind INT(3) NOT NULL,
quartier INT(3) NOT NULL,
num INT(4) NOT NULL
)ENGINE=InnoDB;

CREATE TABLE Personne(
idPersonne INT(100) PRIMARY KEY NOT NULL AUTO_INCREMENT,
nom VARCHAR(15) NOT NULL,
prenom VARCHAR(15) NOT NULL,
idTel INT(100) NOT NULL,
idAdresse INT(100) NOT NULL,
FOREIGN KEY(idAdresse) REFERENCES Adresse(idAdresse),
FOREIGN KEY(idTel) REFERENCES Telephone(idTel)
)ENGINE=InnoDB;

CREATE TABLE TelPers(
idPersonne INT(100) NOT NULL,
idTel INT(100) NOT NULL,
PRIMARY KEY (`idPersonne`,`idTel`),
FOREIGN KEY(idPersonne) REFERENCES Personne(idPersonne),
FOREIGN KEY(idTel) REFERENCES Telephone(idTel)
)ENGINE=InnoDB;

CREATE TABLE Specialiste(
login VARCHAR(10) PRIMARY KEY NOT NULL,
password VARCHAR(10) NOT NULL,
profession VARCHAR(20) NOT NULL,
idListeP INT(5) NOT NULL,
idPanier INT(5),
idPersonne INT(100),
FOREIGN KEY(idPersonne) REFERENCES Personne(idPersonne)
)ENGINE=InnoDB;

CREATE TABLE Patient(
idPatient INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
sexe CHAR NOT NULL,
anniv DATE,
assurance INT(3) NOT NULL,
idPersonne INT(100),
FOREIGN KEY(idPersonne) REFERENCES Personne(idPersonne)
)ENGINE=InnoDB;

CREATE TABLE Produit(
idProduit INT(100) NOT NULL PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(50) NOT NULL,
descr VARCHAR(255) NOT NULL,
prix DECIMAL(5,2) NOT NULL,
qte INT(100) NOT NULL
)ENGINE=InnoDB;

CREATE TABLE Medicament(
idMedic INT(100)NOT NULL PRIMARY KEY AUTO_INCREMENT,
marque VARCHAR(10) NOT NULL,
typeMed VARCHAR(10) NOT NULL,
idProduit INT(100) NOT NULL,
FOREIGN KEY(idProduit) REFERENCES Produit(idProduit)
)ENGINE=InnoDB;

CREATE TABLE Materiel(
idMateriel INT(100) NOT NULL PRIMARY KEY AUTO_INCREMENT,
rabais INT(99) NOT NULL, /* SI PRODUIT VENANT AVEC PRESCRIPTION */
idProduit INT(100) NOT NULL,
FOREIGN KEY(idProduit) REFERENCES Produit(idProduit)
)ENGINE=InnoDB;

感谢您的帮助。 :D

最佳答案

您缺少 Specialiste 表中 idPaier 列的索引

您正在创建的表“Panier”引用了两列1.专家(idPanier)2.产品(idProduit)

idProduit 已被索引,因为它是主键

您还需要在 Specialiste 表中为 idPaier 列添加索引

此外,由于 Panier 表引用了其他两个表...应首先创建这些表

更新后的脚本如下:

    DROP TABLE IF EXISTS Panier;
DROP TABLE IF EXISTS Materiel;
DROP TABLE IF EXISTS Medicament;
DROP TABLE IF EXISTS Produit;
DROP TABLE IF EXISTS ListePatient;
DROP TABLE IF EXISTS Patient;
DROP TABLE IF EXISTS Specialiste;
DROP TABLE IF EXISTS TelPers;
DROP TABLE IF EXISTS Personne;
DROP TABLE IF EXISTS Telephone;
DROP TABLE IF EXISTS Adresse;


CREATE TABLE Adresse(
idAdresse INT(100) NOT NULL PRIMARY KEY AUTO_INCREMENT,
num INT(5) NOT NULL,
rue VARCHAR(30) NOT NULL,
ville VARCHAR(15) NOT NULL,
postal VARCHAR(6) NOT NULL
)ENGINE=InnoDB;

CREATE TABLE Telephone(
idTel INT(100) NOT NULL PRIMARY KEY AUTO_INCREMENT,
typeTel VARCHAR(15) NOT NULL,
ind INT(3) NOT NULL,
quartier INT(3) NOT NULL,
num INT(4) NOT NULL
)ENGINE=InnoDB;

CREATE TABLE Personne(
idPersonne INT(100) PRIMARY KEY NOT NULL AUTO_INCREMENT,
nom VARCHAR(15) NOT NULL,
prenom VARCHAR(15) NOT NULL,
idTel INT(100) NOT NULL,
idAdresse INT(100) NOT NULL,
FOREIGN KEY(idAdresse) REFERENCES Adresse(idAdresse),
FOREIGN KEY(idTel) REFERENCES Telephone(idTel)
)ENGINE=InnoDB;

CREATE TABLE TelPers(
idPersonne INT(100) NOT NULL,
idTel INT(100) NOT NULL,
PRIMARY KEY (`idPersonne`,`idTel`),
FOREIGN KEY(idPersonne) REFERENCES Personne(idPersonne),
FOREIGN KEY(idTel) REFERENCES Telephone(idTel)
)ENGINE=InnoDB;

CREATE TABLE Specialiste(
login VARCHAR(10) PRIMARY KEY NOT NULL,
password VARCHAR(10) NOT NULL,
profession VARCHAR(20) NOT NULL,
idListeP INT(5) NOT NULL,
idPersonne INT(100),
idPanier INT(5),
INDEX(idPanier),
FOREIGN KEY(idPersonne) REFERENCES Personne(idPersonne)
)ENGINE=InnoDB;


CREATE TABLE Patient(
idPatient INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
sexe CHAR NOT NULL,
anniv DATE,
assurance INT(3) NOT NULL,
idPersonne INT(100),
FOREIGN KEY(idPersonne) REFERENCES Personne(idPersonne)
)ENGINE=InnoDB;

CREATE TABLE Produit(
idProduit INT(100) NOT NULL PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(50) NOT NULL,
descr VARCHAR(255) NOT NULL,
prix DECIMAL(5,2) NOT NULL,
qte INT(100) NOT NULL
)ENGINE=InnoDB;

CREATE TABLE Medicament(
idMedic INT(100)NOT NULL PRIMARY KEY AUTO_INCREMENT,
marque VARCHAR(10) NOT NULL,
typeMed VARCHAR(10) NOT NULL,
idProduit INT(100) NOT NULL,
FOREIGN KEY(idProduit) REFERENCES Produit(idProduit)
)ENGINE=InnoDB;

CREATE TABLE Materiel(
idMateriel INT(100) NOT NULL PRIMARY KEY AUTO_INCREMENT,
rabais INT(99) NOT NULL, /* SI PRODUIT VENANT AVEC PRESCRIPTION */
idProduit INT(100) NOT NULL,
FOREIGN KEY(idProduit) REFERENCES Produit(idProduit)
)ENGINE=InnoDB;

CREATE TABLE Panier(
idPanier INT(5) NOT NULL,
idProduit INT(100) NOT NULL,
FOREIGN KEY(idPanier) REFERENCES Specialiste(idPanier),
FOREIGN KEY(idProduit) REFERENCES Produit(idProduit),
PRIMARY KEY (`idPanier`,`idProduit`)
)ENGINE=InnoDB;

关于mysql - mysql数据库结构问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7019801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com