这是我的 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/