[英]Creating an sql database script with tables with multiple foreign keys
對於數據庫創建練習,我正在嘗試使用以下腳本創建一個數據庫,該腳本會給出錯誤:
錯誤代碼:1005。無法創建表
qr_bottle
。invoice
(errno: 150 "外鍵約束格式不正確")
我不確定是否理解這個問題,我是否應該創建沒有外鍵的所有表並在創建所有表后更改表以添加鍵?
-- -----------------------------------------------------
-- Schema Qr_Bottle
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `Qr_Bottle` ;
-- -----------------------------------------------------
-- Schema Qr_Bottle
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `Qr_Bottle` ;
USE `Qr_Bottle` ;
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Client`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Client` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Client` (
`Id` INT NOT NULL AUTO_INCREMENT,
`First_Name` VARCHAR(255) NOT NULL,
`Last_Name` VARCHAR(255) NOT NULL,
`Email` VARCHAR(45) NOT NULL,
`Phone_Number` VARCHAR(45) NOT NULL,
`Payment_Method` INT NULL,
PRIMARY KEY (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Booking`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Booking` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Booking` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Qr_Code` VARCHAR(255) NULL,
`Date` DATETIME NULL,
`Nbr_Of_Client` VARCHAR(10) NULL,
`Client_Id` INT NOT NULL,
PRIMARY KEY (`Id`, `Client_Id`),
FOREIGN KEY (`Client_Id`) REFERENCES `Qr_Bottle`.`Client` (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Role`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Role` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Role` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(45) NULL,
PRIMARY KEY (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Staff`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Staff` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Staff` (
`Id` INT NOT NULL AUTO_INCREMENT,
`First_Name` VARCHAR(255) NULL,
`Last_Name` VARCHAR(255) NULL,
`Role_Id` INT NOT NULL,
PRIMARY KEY (`Id`, `Role_Id`),
FOREIGN KEY (`Role_Id`) REFERENCES `Qr_Bottle`.`Role` (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Booking_has_Staff`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Booking_has_Staff` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Booking_has_Staff` (
`Booking_Id` INT NULL,
`Staff_Id` INT NULL,
PRIMARY KEY (`Booking_Id`, `Staff_Id`),
FOREIGN KEY (`Booking_Id`)
REFERENCES `Qr_Bottle`.`Booking` (`Id`),
FOREIGN KEY (`Staff_Id`) REFERENCES `Qr_Bottle`.`Staff` (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Product_Type`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Product_Type` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Product_Type` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(45) NULL,
PRIMARY KEY (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Invoice`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Invoice` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Invoice` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Date` DATETIME NULL,
`Price` VARCHAR(45) NULL,
`Vat` VARCHAR(45) NULL,
`Order_Id` INT NULL,
PRIMARY KEY (`Id`),
FOREIGN KEY (`Order_Id`) REFERENCES `Qr_Bottle`.`Order` (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Order`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Order` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Order` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Booking_Id` INT NULL,
`Product_Id` INT NULL,
`Invoice_Id` INT NOT NULL,
PRIMARY KEY (`Id`, `Invoice_Id`),
FOREIGN KEY (`Booking_Id`) REFERENCES `Qr_Bottle`.`Booking` (`Id`),
FOREIGN KEY (`Product_Id`) REFERENCES `Qr_Bottle`.`Product` (`Id`),
FOREIGN KEY (`Invoice_Id`) REFERENCES `Qr_Bottle`.`Invoice` (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Product`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Product` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Product` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(255) NULL,
`Capacity` INT NULL,
`Order_Id` INT NOT NULL,
`Product_Type_Id` INT NOT NULL,
PRIMARY KEY (`Id`),
FOREIGN KEY (`Order_Id`) REFERENCES `Qr_Bottle`.`Order` (`Id`),
FOREIGN KEY (`Product_Type_Id`) REFERENCES `Qr_Bottle`.`Product_Type` (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Stock`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Stock` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Stock` (
`Product_Id` INT NOT NULL,
`Quantity` INT NULL,
PRIMARY KEY (`Product_Id`),
FOREIGN KEY (`Product_Id`) REFERENCES `Qr_Bottle`.`Product` (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Spot`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Spot` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Spot` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Client_Id` INT NOT NULL,
PRIMARY KEY (`Id`, `Client_Id`),
FOREIGN KEY (`Client_Id`) REFERENCES `Qr_Bottle`.`Client` (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Payment_Method`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Payment_Method` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Payment_Method` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Payment_Method_has_Client`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Payment_Method_has_Client` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Payment_Method_has_Client` (
`Payment_Method_Id` INT NOT NULL,
`Client_Id` INT NOT NULL,
PRIMARY KEY (`Payment_Method_Id`, `Client_Id`),
FOREIGN KEY (`Payment_Method_Id`)
REFERENCES `Qr_Bottle`.`Payment_Method` (`Id`),
FOREIGN KEY (`Client_Id`) REFERENCES `Qr_Bottle`.`Client` (`Id`));
你的table order product和invoice是interlinkt的,只能在引用表創建后添加外文,所以要在創建引用表后修改表
-- -----------------------------------------------------
-- Schema Qr_Bottle
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `Qr_Bottle` ;
-- -----------------------------------------------------
-- Schema Qr_Bottle
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `Qr_Bottle` ;
USE `Qr_Bottle` ;
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Client`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Client` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Client` (
`Id` INT NOT NULL AUTO_INCREMENT,
`First_Name` VARCHAR(255) NOT NULL,
`Last_Name` VARCHAR(255) NOT NULL,
`Email` VARCHAR(45) NOT NULL,
`Phone_Number` VARCHAR(45) NOT NULL,
`Payment_Method` INT NULL,
PRIMARY KEY (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Booking`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Booking` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Booking` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Qr_Code` VARCHAR(255) NULL,
`Date` DATETIME NULL,
`Nbr_Of_Client` VARCHAR(10) NULL,
`Client_Id` INT NOT NULL,
PRIMARY KEY (`Id`, `Client_Id`),
FOREIGN KEY (`Client_Id`) REFERENCES `Qr_Bottle`.`Client` (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Role`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Role` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Role` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(45) NULL,
PRIMARY KEY (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Staff`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Staff` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Staff` (
`Id` INT NOT NULL AUTO_INCREMENT,
`First_Name` VARCHAR(255) NULL,
`Last_Name` VARCHAR(255) NULL,
`Role_Id` INT NOT NULL,
PRIMARY KEY (`Id`, `Role_Id`),
FOREIGN KEY (`Role_Id`) REFERENCES `Qr_Bottle`.`Role` (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Booking_has_Staff`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Booking_has_Staff` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Booking_has_Staff` (
`Booking_Id` INT NOT NULL,
`Staff_Id` INT NOT NULL,
PRIMARY KEY (`Booking_Id`, `Staff_Id`),
FOREIGN KEY (`Booking_Id`)
REFERENCES `Qr_Bottle`.`Booking` (`Id`),
FOREIGN KEY (`Staff_Id`) REFERENCES `Qr_Bottle`.`Staff` (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Product_Type`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Product_Type` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Product_Type` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(45) NULL,
PRIMARY KEY (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Invoice`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Invoice` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Invoice` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Date` DATETIME NULL,
`Price` VARCHAR(45) NULL,
`Vat` VARCHAR(45) NULL,
`Order_Id` INT NULL,
PRIMARY KEY (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Order`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Order` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Order` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Booking_Id` INT NULL,
`Product_Id` INT NULL,
`Invoice_Id` INT NOT NULL,
PRIMARY KEY (`Id`, `Invoice_Id`),
FOREIGN KEY (`Booking_Id`) REFERENCES `Qr_Bottle`.`Booking` (`Id`)
,
FOREIGN KEY (`Invoice_Id`) REFERENCES `Qr_Bottle`.`Invoice` (`Id`));
ALTER TABLE `Qr_Bottle`.`Invoice`
ADD FOREIGN KEY (`Order_Id`) REFERENCES `Qr_Bottle`.`Order` (`Id`);
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Product`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Product` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Product` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(255) NULL,
`Capacity` INT NULL,
`Order_Id` INT NOT NULL,
`Product_Type_Id` INT NOT NULL,
PRIMARY KEY (`Id`),
FOREIGN KEY (`Order_Id`) REFERENCES `Qr_Bottle`.`Order` (`Id`),
FOREIGN KEY (`Product_Type_Id`) REFERENCES `Qr_Bottle`.`Product_Type` (`Id`));
ALTER TABLE `Qr_Bottle`.`Order`
ADD FOREIGN KEY (`Product_Id`) REFERENCES `Qr_Bottle`.`Product` (`Id`);
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Stock`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Stock` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Stock` (
`Product_Id` INT NOT NULL,
`Quantity` INT NULL,
PRIMARY KEY (`Product_Id`),
FOREIGN KEY (`Product_Id`) REFERENCES `Qr_Bottle`.`Product` (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Spot`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Spot` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Spot` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Client_Id` INT NOT NULL,
PRIMARY KEY (`Id`, `Client_Id`),
FOREIGN KEY (`Client_Id`) REFERENCES `Qr_Bottle`.`Client` (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Payment_Method`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Payment_Method` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Payment_Method` (
`Id` INT NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`Id`));
-- -----------------------------------------------------
-- Table `Qr_Bottle`.`Payment_Method_has_Client`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Qr_Bottle`.`Payment_Method_has_Client` ;
CREATE TABLE IF NOT EXISTS `Qr_Bottle`.`Payment_Method_has_Client` (
`Payment_Method_Id` INT NOT NULL,
`Client_Id` INT NOT NULL,
PRIMARY KEY (`Payment_Method_Id`, `Client_Id`),
FOREIGN KEY (`Payment_Method_Id`)
REFERENCES `Qr_Bottle`.`Payment_Method` (`Id`),
FOREIGN KEY (`Client_Id`) REFERENCES `Qr_Bottle`.`Client` (`Id`));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.