我在作者和书籍之间有一个 n 到 m 的关系。我正在考虑对此进行建模的两种可能性。
第一种可能性是明确的 n 到 m 关系。
表作者
ID Name
1 Follett
2 Rowling
3 Martin
桌书
ID Title Category Logic Time
1 A Dance with Dragons Fantasy 1
2 Harry Potter Fantasy 3
3 The Key to Rebecca Thriller 2
4 World without end Drama 4
表 book_author
authorId bookId
1 3
2 2
3 1
1 4
第二种可能性是将作者 ID 存储在书中。编辑如果每本书有几个作者,我将不得不为每个作者输入一次该书。
表作者
ID Name
1 Follett
2 Rowling
3 Martin
桌书
ID Title Category Logic Time AuthorId
1 A Dance with Dragons Fantasy 1 3
2 Harry Potter Fantasy 3 2
3 The Key to Rebecca Thriller 2 1
4 World without end Drama 4 1
假设我想为特定作者(ID 为 1 的 Ken Follett)找出他出版的第一本书。
在第一种情况下,查询看起来像:
select * from books b join
book_author ba on b.id = ba.book_id
where ba.author_id = 1
order by b.logic_time asc;
在第二种情况下,查询将如下所示:
select * from books b
where a.author_id = 1
order by b.logic_time asc;
我将作者的 ID 存储在上层系统中,以避免与作者表进一步连接。我从不对作者的细节感兴趣。预计系统中的书籍比作者多得多。
我倾向于第一个选项,因为它“更干净”(编辑:不需要重复的书籍条目),但我在证明这个决定时遇到了一些麻烦。
从性能的角度推荐什么?我猜想加入应该导致第一个选项变慢。
可以创建索引以使第一个选项更快?