简体   繁体   English

SQL数据库中的外键问题

[英]Problem with foreign keys in sql database

I have a school assignment that that is giving me and my friends headaches... So this is my queries that i have executed, one at a time ofc... 我的学校作业让我和我的朋友感到头疼...所以这是我一次执行的查询,一次...

CREATE DATABASE GamblingSociety;

USE GamblingSociety;

CREATE TABLE GamblingDen
(
    Name VARCHAR (20) PRIMARY KEY,
    Address VARCHAR (50),
    Phone VARCHAR (10)
);

CREATE TABLE Room (
    RoomNr INT,
    GameCapaity INT,
    GamblingDenName VARCHAR (20),
    PRIMARY KEY (RoomNr, GamblingDenName),
    FOREIGN KEY (GamblingDenName) REFERENCES GamblingDen (Name)
);

CREATE TABLE Employee (
    SSN CHAR (11) PRIMARY KEY,
    Name VARCHAR (20),
    Address VARCHAR(50),
    Salary INT,
    isBoss BOOL,
    GamblingDenName VARCHAR (20),
    FOREIGN KEY (GamblingDenName) REFERENCES GamblingDen (Name)
);

CREATE TABLE GameType (
    Name VARCHAR (20) PRIMARY KEY,
    WinningProcentage FLOAT,
    ResponsibleEmployee CHAR (11),
    FOREIGN KEY (ResponsibleEmployee) REFERENCES Employee (SSN)
);

CREATE TABLE Supplier (
    Name VARCHAR (20) PRIMARY KEY,
    Address VARCHAR (50)
);

CREATE TABLE SupplierOfGameType (
    SupplierName VARCHAR (20),
    GameTypeName VARCHAR (20),
    PRIMARY KEY(SupplierName, GameTypeName),
    FOREIGN KEY (SupplierName) REFERENCES Supplier (Name),
    FOREIGN KEY (GameTypeName) REFERENCES GameType (Name)
);

CREATE TABLE GamblingTable (
    TableNr INT,
    RoomNr INT,
    GamblingDenName VARCHAR (20),
    GameTypeName VARCHAR (20),
    Comments VARCHAR (128),
    PRIMARY KEY (RoomNr, TableNr, GamblingDenName, GameTypeName),
    FOREIGN KEY (RoomNr, GamblingDenName) REFERENCES Room (RoomNr, GamblingDenName),
    FOREIGN KEY (GameTypeName) REFERENCES GameType (Name)
);

CREATE TABLE Shylock (
    Phone CHAR (10) PRIMARY KEY,
    Name VARCHAR (20),
    Contry CHAR (3)
);

CREATE TABLE Customer (
    SSN CHAR (11) PRIMARY KEY,
    Name VARCHAR (20),
    Phone CHAR (10),
    Address VARCHAR (50)
);

But this last query does not work: 但是最后一个查询不起作用:

USE GamblingSociety;

CREATE TABLE GamblingInstance (
    StartTime DATETIME,
    EndingTime DATETIME,
    GamblingDenName VARCHAR (20),
    TableNr INT, 
    GameTypeName VARCHAR (20), 
    Customer CHAR (11),
    Shylock CHAR (10), 
    Debt INT, 
    DebtPayed BOOL,
    DebtPayedDate DATETIME,
    PRIMARY KEY (StartTime, GameTypeName, Customer),
    FOREIGN KEY (GamblingDenName, TableNr, GameTypeName) REFERENCES GamblingTable (GamblingDenName, TableNr, GameTypeName),
    FOREIGN KEY (Customer) REFERENCES Customer (SSN),
    FOREIGN KEY (Shylock) REFERENCES Shylock (Phone)
);

It gives me this error: "Error Code: 1005. Can't create table 'gamblingsociety.gamblinginstance' (errno: 150)" 它给了我这个错误:“错误代码:1005。无法创建表'gamblingsociety.gamblinginstance'(errno:150)”

if I replace this: 如果我替换为:

FOREIGN KEY (GamblingDenName, TableNr, GameTypeName) REFERENCES GamblingTable (GamblingDenName, TableNr, GameTypeName),

with this: 有了这个:

FOREIGN KEY (GameTypeName) REFERENCES GamblingTable (GameTypeName),

It works, so it's something with the GamblingDenName and TableNr. 它可以工作,因此可以与GamblingDenName和TableNr一起使用。

And i have google it and found a lot of tips, but nothing yeat have worked... 而且我有谷歌它,发现了很多技巧,但没有奏效...

So anyone with any idea? 那么有任何想法的人吗?

Thanks in advance! 提前致谢!

There is no key in GamblingTable that can satisfy this REFERENCE: GamblingTable中没有可满足此参考的键:

  REFERENCES GamblingTable (GamblingDenName, TableNr, GameTypeName),

That is, there is no key in GamblingTable for which GamblingDenName, TableNr, GameTypeName are the only columns, or the first three columns. 也就是说, GamblingTable没有键,只有GamblingDenName, TableNr, GameTypeName是它们的列,或者前三列。

There is a key that satisfies REFERENCES GamblingTable (GameTypeName) , which is why that version works. 满足的一个关键REFERENCES GamblingTable (GameTypeName)这就是为什么该版本的作品。

(I have to say that I've never actually seen FOREIGN KEYs being used to parent other FOREIGN KEYs, but I guess it works). (我不得不说,我从未真正看到FOREIGN KEY被用作其他FOREIGN KEY的父代,但我想它是有效的)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM