当前位置: 首页 > 知识库问答 >
问题:

foreign-引用具有不能唯一的单独列的复合键

丌官博文
2023-03-14

我是SQL新手,在MySQL中创建表时遇到以下错误:

源路径\create_bookauthor_table.sql错误:1822:无法添加外键约束。引用的表“author”中缺少约束“book_author_ibfk_1”的索引

我有一个作者表,与一个作者可以创作多本书的书表具有M-N关系,一本书可以由多个作者创作。

因此,我需要创建一个名为BookAuthor的连接表,它实际上可以显示作者所写的书,或者更确切地说是每本书的作者。

我不能使名字和姓氏是唯一的,因为许多人可以共享一个名字。

我想知道如何强制执行外键呢?

我的Book代码如下所示:

create table book (
  isbn varchar(20) not null,
  '
  '
  '
  primary key(isbn),
  
); 

对于作者:

create table author (
  first_name varchar(20) not null, 
  last_name varchar(20) not null, 
  primary key(last_name, first_name)
); 

对于抛出错误的BookAuthor:

create table book_author (
  isbn varchar(20) not null,
  first_name varchar(20) not null, 
  last_name varchar(20) not null, 
  primary key(isbn, first_name, last_name),
  foreign key(first_name, last_name) references author(first_name, last_name),
  foreign key(isbn) references book(isbn)
); 

共有1个答案

丌官凯康
2023-03-14

您的主键不应该是有意义的数据imho(它总是导致眼泪)。

与整数链接将是我的建议。

 类似资料:
  • 问题内容: 我有这个桌子; 我希望选择这样的行: 任一或= 。 另一个字段应该是唯一的。 即我想从表中选择唯一,或者我需要以下结果: 怎么做? 为什么?因为我希望构建一个类似于Facebook的收件箱,在该收件箱中,已发送和已接收的消息将被聚合,而此查询是迄今为止的瓶颈。 我正在使用Rails 3.2和Postgres 9.3。 问题答案: (not )从结果中删除重复项,从而不必要。您可能希望在

  • 问题内容: 我需要一个表来存储一些评分,在此表中,我有一个 综合索引(user_id,post_id) 和其他列来标识不同的评分系统。 在此表中,我没有 主键, 因为 主键 必须是唯一的,而INDEX不必是唯一的,就我而言,唯一性是一个问题。 例如我可以有 缺少PRIMARY KEY可能会导致性能问题?我的表结构好还是需要更改? 谢谢 问题答案: 几点: 听起来您只是在使用表的当前唯一特性,并将其

  • 我有一个结构如下的表, 如果学校处于活动状态,即< code>isDeleted = false 我不确定如何为只取一个值的字段设置唯一约束。布尔字段

  • 模板实体: 工作流实体: 指挥实体:

  • 问题内容: 会根据其位置而不是其值来生成其元素被视为唯一的元素。所以基本上我想避免重复这样的事情: 之后的过滤是不可能的,因为在我的情况下,排列的数量太大。 有人知道合适的算法吗? 非常感谢你! 编辑: 我基本上想要的是以下内容: 这是不可能的,因为sorted创建列表并且itertools.product的输出太大。 抱歉,我应该已经描述了实际问题。 问题答案: 结果: 编辑(这是如何工作的):

  • 我正在运行Postgres 9.5,并试图基于3个字段创建一个唯一的约束。我遇到的问题是,其中两列可以为NULL,因此这些字段为NULL的行不会违反唯一约束。我的目标是将其作为一个约束,因为我正在尝试更新冲突(UPSERT)。 桌子的结构是这样的 我在这里发现了另一个问题,我可以按照以下方式做一些事情 我不确定在where子句中有两个字段时这是否真的有效,但如何在冲突时调用这个唯一索引呢? 或者我