外键参考两张表

问题描述

我目前正在使用数据库,但是遇到了一个新问题。涉及的实体是宇宙,竞争,游戏,底池。这是创建表的SQL文件:

CREATE TABLE Universe (
    id int NOT NULL IDENTITY PRIMARY KEY,history nvarchar (max),creation_date date
);

CREATE TABLE Pot (
    pot_name nvarchar(100),universe_id int FOREIGN KEY REFERENCES Universe(id),pot_description nvarchar(100),media_description nvarchar(100),is_official_pot bit
    PRIMARY KEY (pot_name,universe_id)
);

CREATE TABLE Competition (
    universe_id int NOT NULL FOREIGN KEY REFERENCES Universe(id),compt_name nvarchar(100) NOT NULL,alias nvarchar(100),history nvarchar(max),rules nvarchar (max),winner_id nvarchar(100) FOREIGN KEY REFERENCES RaulUser(username),edition int NOT NULL,is_official_competition bit NOT NULL,PRIMARY KEY (universe_id,compt_name,edition)
);

CREATE TABLE Game (
    id int NOT NULL IDENTITY PRIMARY KEY,pot_name nvarchar (100) NOT NULL,universe_id int NOT NULL,competition_name nvarchar(100) NOT NULL,competition_edition int NOT NULL,competition_round int NOT NULL,home_raul_u_username nvarchar (100) FOREIGN KEY REFERENCES RaulUser(username) NOT NULL,home_team nvarchar (100) NOT NULL FOREIGN KEY REFERENCES Team(team_name),home_score  int,away_raul_u_username nvarchar (100) NOT NULL FOREIGN KEY REFERENCES RaulUser(username),away_team nvarchar (100) NOT NULL FOREIGN KEY REFERENCES Team(team_name),away_score  int,is_over bit NOT NULL,played_date date,FOREIGN KEY (universe_id,competition_name,competition_edition) REFERENCES Competition(universe_id,edition),pot_name) REFERENCES Pot(universe_id,pot_name)
);

问题从最后一张桌子开始(游戏),因为我不能将Universe_id用作不同桌子的外键。解决此问题的最佳方法是什么?创建M:M表Game_Pot? 我只需要记录每场比赛的底池,因为底池会随着时间的变化而变化,我不想丢失这些数据。

很长的帖子,很抱歉,谢谢大家:)

解决方法

我看到的唯一问题是表Game的定义:

FOREIGN KEY (universe_id,pot_name) REFERENCES Pot(universe_id,pot_name)

列的顺序很重要。表Pot的主键是(pot_name,universe_id),因此您需要交换外键中的列,如下所示:

FOREIGN KEY (pot_name,universe_id) REFERENCES Pot(pot_name,universe_id)

请注意,在每个表中都有identity(或类似主键)可能会简化您的设计:这将允许您减少子表中的列数,并使用单列外键。同时,您仍然可以对具有唯一约束的父表中的列元组强制执行唯一性。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...