mysql - 多作者多本书的关系数据库

标签 mysql database oracle

这是我的 friend 在接受亚马逊电话采访时被问到的问题。设计一个关系数据库来记录书籍,一本书可以有多个作者,一个作者可以出版多本书。他被要求设计关系(表)和每个属性的类型(是否是文本、字符串等) 问题是他们还希望能够搜索作者姓名和书名。 我知道这样的事情不会很有效:

Table Autor 
AutorID AuthorName booksIDs(Text) Example:15, Morris Mano:11,56,234

Table Book
BookID Booktitle AuthorsID(Text) Example: 11:Computer Architecture: 15,34,88 

对于此处的这些属性,使用什么其他类型比文本类型更好?

最佳答案

基本的第三范式类似于使用交集表的形式。在关系表中存储逗号分隔值始终是一个错误。

CREATE TABLE author (
  authorID integer primary key,
  authorName varchar2(100)
);

CREATE TABLE book (
  bookID integer primary key,
  bookTitle varchar2(100)
);

CREATE TABLE author_book (
  authorID integer,
  bookID   integer,
  constraint pk_author_book primary key( authorID, bookID )
);

现在,实际上,您几乎肯定会将作者姓名分解为名字、姓氏等以方便搜索。如果您使用 Oracle,您可能会创建 Oracle Text 索引以便于搜索。如果您是亚马逊,您可能需要创建一些辅助表以方便在不同表中的属性之间进行搜索。

关于mysql - 多作者多本书的关系数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19170855/

相关文章:

php - 寻找有关如何使用 PHP 构建私有(private)消息系统的教程

mysql - 错误exec.DDLTask:java.lang.NoSuchMethod错误:

mysql - 如何返回表中与 MySQL 中另一列共享相同值的重复项?

mysql - 硬连接查询

mysql - 计算多列中出现的次数

mysql - 检查数据库行之一中是否存在值

jquery - 如何设置自动完成以显示 Laravel 中另一个表的数据(OneToMany 关系)

java - jdbc 驱动程序中是否有从 java.sql 类型转换为正确的 sql 字符串的方法?

mysql - 是否可以对特定用户 oracle 的每三行求和?具有计数功能或任何其他功能

java - 使用 createNativeQuery 调用 Oracle 存储过程