Mysql 一个表可以有两个外键吗?

Mysql 一个表可以有两个外键吗?,mysql,database,foreign-keys,primary-key,Mysql,Database,Foreign Keys,Primary Key,我有以下表格(主键为粗体。外键为斜体) 客户表 ID---Name--余额---账户名称---账户类型 科目类别表 账户类型——余额 客户详细信息表 账户名称--First\u Name---Last\u Name---Address 在Customer表中可以有两个外键吗?如何在MySQL中实现这一点 已更新 我正在为一个最终项目开发一个基于网络的会计系统 账户类别 账户类型------余额 资产 负债 权益 费用 收入 资产 资产\u ID----资产名称----余额----

我有以下表格(主键为粗体。外键为斜体)

客户表
  • ID---Name--余额---账户名称---账户类型
科目类别表
  • 账户类型——余额
客户详细信息表
  • 账户名称--First\u Name---Last\u Name---Address
在Customer表中可以有两个外键吗?如何在MySQL中实现这一点


已更新

我正在为一个最终项目开发一个基于网络的会计系统

账户类别

账户类型------余额

资产
负债
权益
费用
收入

资产

  • 资产\u ID----资产名称----余额----账户类型
应收账款

  • 应收账款\u ID——应收账款名称------地址------电话------资产\u ID----账户类型
应收账款

  • 交易标识----描述----金额--- 余额----应收账款\标识----资产\标识----科目类型

我使用软件绘制了ER(实体关系)图,当我指定关系时,它会自动添加多个外键,如上图所示。设计不够合理吗?

是的,MySQL允许这样做。同一个表上可以有多个外键


在此处获取更多详细信息

架构中的外键(在
帐户名称
帐户类型
上)不需要任何特殊处理或语法。只需在Customer表上声明两个独立的外键。它们当然不会构成一个有意义的复合键

这个模式还有许多其他问题,但我要指出的是,用多个唯一的列或其中一个在功能上依赖于另一个的列来构建主键通常不是一个好主意。似乎至少有一种情况适用于Customer表中的ID和Name列。这允许您使用相同的ID(不同的名称)创建两行,我猜您不希望这样做

create table Table1
(
  id varchar(2),
  name varchar(2),
  PRIMARY KEY (id)
)


Create table Table1_Addr
(
  addid varchar(2),
  Address varchar(2),
  PRIMARY KEY (addid)
)

Create table Table1_sal
(
  salid varchar(2),`enter code here`
  addid varchar(2),
  id varchar(2),
  PRIMARY KEY (salid),
  index(addid),
  index(id),
  FOREIGN KEY (addid) REFERENCES Table1_Addr(addid),
  FOREIGN KEY (id) REFERENCES Table1(id)
)


是的,一个表有一个或多个外键,每个外键都有一个不同的父表。

添加一个快速谷歌搜索显示:一个表可以有多个外键,而没有组合键。复合键只是意味着有两个或更多列组成键值。外键中的列集合引用另一个表中的列集合中的值(或者,例外情况下,同一个表中的另一组列)。一个表可以有一个不包含外键列的复合键,也可以有多个不属于任何复合键的外键。我不相信这个设计是合理的,但这不是因为有多个外键。我不清楚在customer表中是否有两个唯一的键(ID和Name),或者一个复合主键。通常,如果您有一个ID列,则该列是唯一的。在现实世界中,名字是出了名的“不唯一”。您可能应该将Customer.ID列设置为该表的主键。我不确定客户的余额是什么意思;通常,账户有余额。没有显示帐户表,这令人惊讶。帐户可能有帐户名(和编号)。。。继续。。。也可能包含客户ID。Account Category表听起来有点令人惊讶;它本身通常不会有余额(属于Account表)。Customer Detail表中可能有一个Customer ID来引用Customer表,而不是Customer Detail表在Customer表中定义帐户名称。客户通常可以有多个账户(例如支票账户和储蓄账户)。不过,所有这些分析都与标题问题无关。答案是肯定的。你应该接受对你有帮助的答案。请接受你以前的回答,这对其他面临同样问题的用户也会有帮助。请看accept的工作原理:只是要明确一点:制作复合键与拥有两个外键无关。见Jonathan对问题的评论。同意@Jonathan。但我只是想让复合键是同一列上的不同键。这并不意味着复合密钥和具有两个外键是相同的。更新了我的答案also@Teez:无论你想要什么(原文如此),它都不能回答问题,这与复合键无关,普通键或外键。
CREATE TABLE User (
user_id INT NOT NULL AUTO_INCREMENT,
userName VARCHAR(100) NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
userImage  LONGBLOB NOT NULL, 
Favorite VARCHAR(255) NOT NULL,
PRIMARY KEY (user_id)
);
CREATE TABLE Event (
    EventID INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (EventID),
    EventName VARCHAR(100) NOT NULL,
    EventLocation VARCHAR(100) NOT NULL,
    EventPriceRange VARCHAR(100) NOT NULL,
    EventDate Date NOT NULL,
    EventTime Time NOT NULL,
    EventDescription VARCHAR(255) NOT NULL,
    EventCategory VARCHAR(255) NOT NULL,
    EventImage  LONGBLOB NOT NULL,     
    index(EventID),
    FOREIGN KEY (EventID) REFERENCES User(user_id)
);