【问题标题】:Create a shelf relation from multiple books for different users从多本书为不同用户创建书架关系
【发布时间】:2014-05-20 05:17:06
【问题描述】:

我有以下关系:

Books(book_id, title, author),

Members(member_id, name, username, password)

Librarian(librarian_id, name, username, password)

我想为以下语句创建关系和架构:

  • 从现有书籍创建迷你书架(供会员和图书管理员使用)
  • 会员还可以使用由图书管理员创建的书架

【问题讨论】:

    标签: database database-design schema relational-database database-schema


    【解决方案1】:

    如果我正确理解了这个问题,我会选择这样的:

    合并成员表中的馆员并添加IsLibrarian列以区分两种类型的用户

    Members(member_id, name, username, password, islibrarian)
    
    Shelf(shelf_id, caption, dateopened, owner, etc...)
    ShelfDetails(id, shelf_id, bookid)
    

    书架的所有者在成员表中(外键),可以是普通会员或图书管理员。

    然后,用户可以使用哪些架子取决于您的应用程序。您可以轻松选择用户创建的书架和图书馆员使用此架构创建的书架。

    附: 提出问题以展示您为解决此问题所付出的努力(例如展示您的想法)也会很好。

    【讨论】:

    • 那么,我是否应该将shelf_id 属性放入Members 表中作为Members(member_id, name,username, shelf_id,..) 以获得每个用户的货架?谢谢
    • 如果您将shelf_id 放入Members 表中,则成员只能有一个架子(如果您希望这样的话,可以)如果您希望成员分配多个架子,那么Branko Dimitrijevic 的回答显示了如何使用 USER_SHELF 表来完成。该表保存了哪些成员被分配到哪个架子的信息,每个架子可以被 0,1 或多个成员使用。
    【解决方案2】:

    看起来您需要类似于此的内容(为简洁起见,省略了非关键字段):

    “创建架子”和“使用架子”的概念有区别:

    • 前者是 1:N 关系,由外键 SHELF.USER_ID 表示。
    • 后者是 M:N 关系,由联结表 USER_SHELF 表示。

    USER - MEMBER - LIBRARIAN 层次结构1 可以由单个表(可能带有某种“类型标志”)或使用these strategies 之一表示。


    1 ER 术语是“类别”,又名。子类化、子类型化、继承或泛化层次结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2010-12-05
      相关资源
      最近更新 更多