0

我正在尝试将数据库布局概念化,并且我有一个“理论”问题。我有一个系统,例如:

  • 用户
  • 图书

这些书不是唯一的,例如爱丽丝、鲍勃和卡尔都可以拥有一本《白鲸记》。此外,每个用户可以拥有许多书籍。这是一个简单的多对多关系,我非常了解。但是,我将在哪里存储有关 Alice 的特定白鲸记副本的信息?

我最终希望能够做到以下几点: - 找到所有拥有 Moby Dick 副本的用户 - 更改有关一本书的个人“实例”的信息:Alice 的 Moby Dick 副本被“借出” - 更改/添加一本书的信息(即每个人的副本):将出版商信息添加到 Moby Dick。

我看不出如何有效地布置这一点。我可以有 1 个书籍表,1 个用户表,然后为 n 个用户提供 n 个表,每个表都包含有关他/她的收藏的信息。当我需要找到每一个有白鲸记的副本时,这似乎会很慢。任何的意见都将会有帮助。

4

1 回答 1

0

假设它是一个图书馆数据库,我将从以下设计开始。表:

  1. 用户(借书的人)
  2. 书籍(关于书籍、书名、作者等的基本信息……这个级别的信息是合乎逻辑的)
  3. 书本(这个存储物理印刷书籍信息)
  4. 用户图书借阅(谁借了哪本图书)

这种表结构允许,

  1. 一本书可以有许多书本,并且每本书都可以被识别。
  2. 一个用户可以拥有多本书

为了更好地理解这里是一些伪 SQL 代码。

“查找所有拥有 Moby Dick 副本的用户”

SELECT users.user_name
  FROM users u, "user book loans" ubl, "book copies" bk, books b
 WHERE 1 = 1
   AND b.book_name = "Moby Dick"--find book
   AND b.book_id = bk.book_id--find copies of that book
   AND bk.book_copy_id = ubl.book_copy_id--find loan info for the book copy
   AND ubl.user_id = u.user_id--find user who borrowed the copy

我认为上面的查询解释了表结构,您可以添加属性,如发布到书籍副本的日期,或有关书籍作者的信息,用户书籍贷款上的一些日期字段以跟踪使用的时期

于 2013-01-17T13:16:02.913 回答