设计用于存储书籍,版本,颜色的表格布局

时间:2018-06-29 09:37:33

标签: mysql database-design database-normalization

例如,我必须组织以下信息:书籍,书籍版本和每页的颜色。

让我们假设一本书只能有一个版本,并且由于应用程序是用PHP编写的,因此每个表都将具有在其上进行读写的功能集,并且我想尽可能地使其简单。我不能决定是否最好:

[Books]
bookid
author

[Editions]
editionid
bookid
title
publisher
isbn

[PagesColors]
editionid
page
color

或尝试简化:

[Books]
bookid
bookidreference
author
title
publisher
isbn

[PagesColors]
bookid
page
color

并记录如下:

1, 0, "Jane Austen", null, null, null
2, 1, null, "Emma", "Books Enterprise", 12231231213
3, 1, null, "Emma in Italian", "Jane Austen Italian Editions", 45345354334

“ bookidreference”将用于链接同一表格中的书籍和版本。

3 个答案:

答案 0 :(得分:0)

我认为简化版本更好,因为它非常简洁且易于理解。...但是要避免在数据库中输入空条目。

答案 1 :(得分:0)

我不知道您要在“ editions.bookreference”中使用什么,但是第一个似乎更一致。 书籍的名称可以随新版本一起更改吗?ISDN是否也可以更改?所有在版本之间无法更改的值都应保留在“书”中。您还应该添加发布日期列。现在可能不需要,但是可能会(如果您的任务不是学校项目)。

除此之外,它看起来还不错。也许也将作者移到一个表上,并使用书籍和作者之间的关系表,但是这个概念很牢固。

答案 2 :(得分:0)

我想到了这个主意

[Books]
bookid
bookid_parent
author
release_date

[BooksDetails]
bookid
title
publisher
isbn
...other details without index.

[PagesColors]
bookid
page
color

在这种情况下,我将没有第二种解决方案那么多的NULL。记录如下:

[Books]
1, 0, "Jane Austen", 2018-01-01
2, 1, null, 2018-02-02
3, 1, null, 2018-03-03

[BooksDetails]
2, "Emma", "Books Enterprise", 12231231213
3, "Emma in Italian", "Jane Austen Italian Editions", 45345354334