一般和特定数据的数据库结构

时间:2013-01-17 00:13:04

标签: database-design

我试图概念化数据库布局,我有一个“理论”问题。我有一个系统,例如:

  • 用户

书籍并不是唯一的,例如Alice,Bob和Carl都可以拥有Moby Dick的副本。此外,每个用户可以拥有许多书籍。这是一个简单的多对多关系,我很清楚。但是,我在哪里可以存储有关Alice的Moby Dick特定副本的信息?

我最终希望能够做到以下几点: - 找到所有拥有Moby Dick副本的用户 - 更改有关书籍个别“实例”的信息:爱丽丝的“白鲸记”副本被“借出” - 更改/添加图书的信息(即每个人的副本):将发布者信息添加到Moby Dick。

我看不出如何有效地解决这个问题。我可以有1个书籍表,1个用户表,然后是n个用户的n个表,每个表包含有关他/她的收藏的信息。当我需要用Moby Dick的副本找到每个人时,这似乎会很慢。任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:0)

假设它是一个库数据库,我将从下面的设计开始。 表:

  1. 用户(借书副本)
  2. 书籍(关于书籍,标题,作者等的基本信息......关于这一层次的信息是合乎逻辑的)
  3. 书籍副本(此书存储了书籍印刷书籍信息)
  4. 用户账户贷款(借用了该书的副本)
  5. 此表结构允许,

    1. 一本书可以有许多书籍副本,每一本都可以被识别出来。
    2. 一位用户可以拥有多本图书副本
    3. 为了更好地理解这里是一些伪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
      

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