Php 如何设计一个数据库来跟踪我家人拥有的书籍?

Php 如何设计一个数据库来跟踪我家人拥有的书籍?,php,mysql,database,Php,Mysql,Database,我不一定要寻找MySQL或PHP代码。相反,我试图得到一个如何设置一切的概念 我想用MySQL(并用PHP更新)创建一个数据库,存储我家人所有的书。我想为我家里的每个人设置不同的“书架”,这样我们就可以看到谁有某本书 我的第一个想法是为所有的标题、作者等创建一个表格,并为用户id创建一个字段,以显示谁拥有这本书。然而,我可能有一份饥饿游戏的副本,我的祖母可能有一份饥饿游戏的副本。我想在两个书架上都能看到。我的想法唯一可行的办法是如果我们没有复本 我的下一个想法是为每个用户使用不同的表,并有一个字

我不一定要寻找MySQL或PHP代码。相反,我试图得到一个如何设置一切的概念

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

我的第一个想法是为所有的标题、作者等创建一个表格,并为用户id创建一个字段,以显示谁拥有这本书。然而,我可能有一份饥饿游戏的副本,我的祖母可能有一份饥饿游戏的副本。我想在两个书架上都能看到。我的想法唯一可行的办法是如果我们没有复本


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


这应该如何设计

我可以想到一个简单的解决方案:

图书表:所有唯一图书的列表

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

用户:用户列表


这是相当基本的。所有人、书和作者都应该不言自明。将任何其他字段添加到所需的表中。书架和图书作者都是交叉参考表,因此每本书可以有多个所有者,每本书可以有多个作者

**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

下面是另一个解决方案:

**** 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

你可能想区分这本书的所有权和现在的占有权,因为人们无疑是在借书。因此,图书表(如果要扩展到DVD等,最好称之为ITEM)和PERSON,以及所有权表BOOK/MEDIA\u OWNER,可能会附带一个ITEM\u LOAN表

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


顺便说一下,这是一个普遍接受的规则,如果一个版本的作品在印刷之间的变化超过20%,那么它就是一个新的印象,但它并不总是被授予一个新的ISBN。取决于出版商。此外,书籍的层次结构基于Work-有很多方法可以做到这一点,另一种解决方案是一个表用于书籍,另一个表用于用户,第三个表用于链接每个用户与每本书(一对一)-因此,如果您和您的祖母有同一本书,那么书/用户中会有两个条目,一个是书id和您的用户id,一个是书id和她的用户id“我的下一个想法是为每个用户使用不同的表”不,不,只有一个表具有用户的主键,并且有不同的表(书等)具有将表链接在一起的外键的。“饥饿游戏”可能会在数据库中出现两次,但会有不同的用户id。或者,使用一个表存储所有书籍,然后使用另一个名为“副本”的表链接书籍和用户。(用户:“1”,书籍:“饥饿游戏”,副本:“1”…用户“2”,书籍“饥饿游戏”,副本“1”,但确保外键从“副本”链接到“用户”出于兴趣,你用什么作为你的图书id?ISBN?只是想知道身份的问题。从技术上来说,这不是一个数据库问题,但由于你的id将是如何协调你的数据的核心…我不会使用ISBN,因为我可能最终会将其扩展到电影和视频游戏。可能是UPC代码。所以在他的例子是,BOOK_PERSON,我会显示每个人都拥有哪些书籍。我会有多个具有相同用户id的行,我会有多个用户id链接到同一本书。我是否正确地理解了这个概念?我对数据库设计相当陌生。是的-这里会有多个条目将人们链接到他们所有的书籍“系列”项目表中的字段应该足够了,是吗?它可以与类型、年份等一起。对于这个想法+1,我很喜欢。@KennyJohnson是的,尽管将其分解到另一个表中可能会有用,因为您可能希望指示系列顺序。顺序可能基于出版物(尽管您可以从作品的出版日期获得该顺序)或者你可以称之为该系列的“内部时间线顺序”(例如,在Ender系列中)
**** 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