2

我不一定要寻找 MySQL 或 PHP 代码。相反,我试图了解如何设置所有内容。

我想使用 MySQL(并使用 PHP 更新它)创建我家人拥有的所有书籍的数据库。我想为家里的每个人设置不同的“书架”,这样我们就可以看到谁拥有某本书。

我的第一个想法是为所有标题、作者等设置一个表格,并为用户 ID 设置一个字段以显示谁拥有这本书。但是,我可能有一份饥饿游戏,我的祖母可能有一份饥饿游戏。我希望能够在两个书架上展示它。我的想法行之有效的唯一方法是,如果我们没有重复的书。

我的下一个想法是为每个用户使用不同的表,并有一个字段包含用户拥有的每本书的书 ID。我认为这将在小范围内起作用,但它似乎不是一个有效的设计。一旦我的网站稳定运行,我计划将数据库公开给我镇上的每个人(数千人)使用,所以我想从正确的设计开始。

这个应该怎么设计?

4

5 回答 5

3
BOOK
--------
book_id
title
other_book_related_info

PERSON
-------
person_id
name
other_person_info

BOOK_PERSON
-------------
book_id
person_id
possibly-dates-when-this-person-owned-this-book
于 2012-11-27T21:08:27.370 回答
1

这是非常基本的。所有者、书籍和作者应该是不言自明的。将任何其他字段添加到您想要的那些表中。bookshelf 和 book_authors 都是交叉引用表,因此每本书可以有多个所有者,每本书可以有多个作者。

**owner:**
owner_id
owner_name
...

**book:**
book_id
book_name
...

**author:**
author_id
author_name
...

**bookshelf:**
owner_id
book_id

**book_authors:**
book_id
author_id
于 2012-11-27T21:10:39.343 回答
1

您可能想区分这本书的所有权和当前拥有权,因为人们无疑会借钱。因此,BOOK 表(如果要扩展到 DVD 等,最好将其称为 ITEM)和 PERSON 表,以及所有权表 BOOK/MEDIA_OWNER,可能与 ITEM_LOAN 表一起有用。

您可能还希望允许对项目集进行分组,以便可以单独识别一本书的多卷或一个演出季的光盘。书籍(和电影等)也成系列出现,所以也要考虑如何表现它。

顺便说一句,一个普遍接受的规则是,如果一个作品的版本在两次印刷之间变化超过 20%,那么它就是一个新的印象,但它并不总是被授予一个新的 ISBN。取决于出版商。此外,书籍的层次结构基于作品 -< 版本 -< 印象,这些人将是与书籍相关的数据结构信息的良好来源。

于 2012-11-27T23:04:50.660 回答
1

这是我能想到的一个简单的解决方案:

Book Table : 所有独特书籍的列表

用户书籍:包含用户 ID 和书籍 ID。多个用户可以拥有相同的标题。

用户:用户列表;

于 2012-11-27T21:07:34.837 回答
0

这是另一个解决方案:

**** BOOK ***
book_id
book_title
book_desc
book_bought

*** USERS ***
user_id, 
name,
dateOfBirth

** Copies **
copy_id (PK)
user_id (FK)
book_id (FK)
NoOfCopies
于 2012-11-27T21:12:31.980 回答