我想知道如何在简单数据库中保存作者(如果有多个作者)。
如果一本书只有一个作者,那么一切都很简单。问题是,当我想拥有表格书籍,并想与表格作者进行简单的选择和联接时:
书
| id | Title | ISBN | Authors? |
---------------------------------
| | | | |
| | | | |
作者
| id | Firs Name | Last Name | Short Name | Pseudonym |
--------------------------------------------------------
| | | | | |
| | | | | |
我知道我可以使用具有相同ISBN和标题的单独行,但我想知道,如果标题有时非常大(255长度UTF字符串/varchar/char),这是否是一个好主意。
我知道这可能是一个非常基本的问题,很抱歉我不得不问一下:(
您有两种真正的可能性:
所以,让我们先考虑一下:一本书有它的所有细节和一个ID。每个作者都有许多细节和一个ID。如果要将作者与一本书关联,可以在另一个表中添加一行,比如说“Credits”。
这样,您就有了两个一对多的关系(从作者到学分,从书本到学分),并且可以表示您需要的内容,而不需要任何尴尬的多重值。
由于一本书可以有多个作者,而且一个作者可以写多本书,因此我建议在书和作者表之间建立多对多关系。
添加另一个链接这两者的表,如下所示:
书籍作者
|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'
摆脱书籍中的作者栏。
书和作者之间有多对多的关系:有些书有多个作者,有些作者写了不止一本书。而且,书有第一、第二和第三作者,等等。你不能以某种不可预测的顺序呈现一本书的作者名。作者和出版商决定作者顺序,而不是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#代码“一次命中”执行。从许多不同的来源中提取数据。由于数据量巨大,这种创建引起了一些问题。已经决定,与其一口气创建一个数据库,不如一次创建一个数据库。到 创建几个包含核心数据表的较小数据库。 将较小的数据库合并为一个较大的数据库。 建立架构/添加相关约束。