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

如何在简书表中写到数据库多个作者?

管炳
2023-03-14

我想知道如何在简单数据库中保存作者(如果有多个作者)。

如果一本书只有一个作者,那么一切都很简单。问题是,当我想拥有表格书籍,并想与表格作者进行简单的选择和联接时:

| id  | Title | ISBN | Authors? | 
---------------------------------
|     |       |      |          |
|     |       |      |          |

作者

| id  | Firs Name | Last Name | Short Name | Pseudonym | 
--------------------------------------------------------
|     |           |           |            |           |
|     |           |           |            |           |

我知道我可以使用具有相同ISBN和标题的单独行,但我想知道,如果标题有时非常大(255长度UTF字符串/varchar/char),这是否是一个好主意。

我知道这可能是一个非常基本的问题,很抱歉我不得不问一下:(

共有3个答案

华知
2023-03-14

您有两种真正的可能性:

  • 每本书有许多作者,但每个作者最多只能有一本书(极不可能)-这样,您将在作者表中添加一个外键,将该作者链接到这本书。您可以拥有两个具有相同图书ID的这样的作者,但这意味着您不必复制书籍详细信息,或者实际上不必复制超过书籍ID的任何内容
  • 更有可能:每本书有多个作者,每个作者有多本书。这称为“多对多关系”,需要您添加另一个表。

所以,让我们先考虑一下:一本书有它的所有细节和一个ID。每个作者都有许多细节和一个ID。如果要将作者与一本书关联,可以在另一个表中添加一行,比如说“Credits”。

  • 每个作者可以有许多学分,但每个学分只针对一个作者

这样,您就有了两个一对多的关系(从作者到学分,从书本到学分),并且可以表示您需要的内容,而不需要任何尴尬的多重值。

宇文育
2023-03-14

由于一本书可以有多个作者,而且一个作者可以写多本书,因此我建议在书和作者表之间建立多对多关系。

添加另一个链接这两者的表,如下所示:

书籍作者

|BookID|AuthorID|

BookID是书籍的外键。id和AuthorID是作者的外键。身份证件。

如果要返回给定书籍的所有作者,可以执行以下操作:

SELECT Authors.id, Authors.FirstName, Authors.LastName
FROM Authors INNER JOIN BookAuthors ON Authors.id = BookAuthors.AuthorID
WHERE BookAuthors.BookID = '123'
邵毅
2023-03-14

摆脱书籍中的作者栏。

书和作者之间有多对多的关系:有些书有多个作者,有些作者写了不止一本书。而且,书有第一、第二和第三作者,等等。你不能以某种不可预测的顺序呈现一本书的作者名。作者和出版商决定作者顺序,而不是dbms程序员。

因此,您需要一个包含以下列的books_authors

  book_id
  author_id
  author_ordinal   (a number like 1,2,3 to denote the order of authors)

使用此查询可以获取特定书籍的作者列表:

 SELECT isbn, title, author_ordinal, first, last
   FROM books b
   LEFT JOIN books_authors ba ON (b.id = ba.book_id)
   LEFT JOIN authors a ON (ba.author_id = a.id)
  WHERE isbn = '978whatever'
  ORDER BY author_ordinal

如果您想让您的软件在书目上完整,您最好在books\u authors表中放置一个名为“角色”的文本字段。人们在书籍创作中扮演着不同的角色,如“作者”、“插画家”、“编辑”、“系列编辑”、“撰稿人”、“序言作者”等等。角色栏将允许您捕获该信息。

顺便说一下,如果您始终一致地命名您的id列,大多数dbms逆向工程工具会更高兴。因此,您应该使用books.book_id和authors.author_id而不仅仅是books.id和authors.id.

 类似资料:
  • 问题内容: 我是hibernate和尝试事物的新手。似乎所有令人感兴趣的一件事是如何连接到不同的数据库?我在这里有两个问题: 如果在同一个Web应用程序中,我需要连接到MySQL和Oracle,该怎么办? 我正在使用MySQL,并且有两个数据库test1和test2,如何连接和检索数据? 我在博客中读到我们可以创建不同的配置文件并执行此操作。我尝试过,但是没有成功。这是我尝试过的: 其中path是

  • 问题内容: 我对学习数据库引擎的工作方式(即它的内部)感兴趣。我知道CS中讲授的大多数基本数据结构(树,哈希表,列表等),以及对编译器理论的很好理解(并实现了一个非常简单的解释器),但我不知道该怎么做关于编写数据库引擎。我已经搜索了有关该主题的教程,但找不到任何教程,因此我希望其他人可以向我指出正确的方向。基本上,我想了解以下信息: 数据如何在内部存储(即表的表示方式等) 引擎如何查找所需的数据(

  • 嗨,我是拉威尔的新手,我在将数据插入数据库和抛出错误时遇到了麻烦 msgstr"Countable():参数必须是实现可数的数组或对象" 我想在数据库中添加所有注册员工的出勤信息 控制器 叶片输出: 模型类员工出席扩展模型{// } 模型2 命名空间App; 使用Illumb\Database\Elount\Model; 类employee_data扩展模型{//protected$fillabe

  • 问题内容: 我想在系统中合并多个数据库。大多数情况下,数据库是MySQL。但是将来可能会有所不同,即Admin可以生成这样的报告,该报告是 使用异构 数据库系统的 来源 。 所以我的问题是 Laravel是否提供了Facade 来应对这种情况?还是任何其他具有更合适问题处理能力的框架是? 问题答案: [**使用> = 5.0**](https://github.com/laravel/larave

  • 问题内容: 如何从Sql数据库读取MP3。在SQL中,我已经将文件存储为二进制格式。现在我想检索存储在sql中的Mp3文件,并显示在我的aspx页面中。如何???? 请帮助… 问题答案: 以最简单的形式,这就是您将如何获取原始字节的方法,如果不知道您想要的内容,将无法显示更多内容……

  • 问题内容: 所有,我必须创建一个具有基本架构的数据库。该数据库将很大(超过100GB),并将用作数据仓库。现在,该数据库的创建当前正在通过C#代码“一次命中”执行。从许多不同的来源中提取数据。由于数据量巨大,这种创建引起了一些问题。已经决定,与其一口气创建一个数据库,不如一次创建一个数据库。到 创建几个包含核心数据表的较小数据库。 将较小的数据库合并为一个较大的数据库。 建立架构/添加相关约束。