【问题标题】:ER-Model for Borrowing-Lending-Network?借贷网络的 ER 模型?
【发布时间】:2015-01-06 00:26:19
【问题描述】:

我计划创建我的第一个数据库,所以这将是一个新手问题。我的数据库应该用于借贷网络,用户可以在其中借用其他用户的产品。创建一个用户帐户应该足以同时进行借贷。唯一的例外应该是用户不能借用自己提供的产品。

所以我的问题是这两个选项中哪个更好:

拥有一个可以借贷的用户实体。实体名称“用户”。 为借款人和捐赠人设置两个不同的实体以防止用户借用自己的产品?

【问题讨论】:

    标签: database entity conceptual


    【解决方案1】:

    如果我正确理解您的问题,我会推荐第三种方法:

    • USER model = 这些是可以借入或借出的用户
    • ITEM model = 这标识了可以借用的物品以及它们的所有者
      • owner_id = 引用 USER 对象的 ID。
    • HISTORY model = 跟踪借贷历史,可能包括以下内容:
      • item_id = 引用 ITEM 的 id
      • borrower_id = 引用了借用该项目的 USER 的 ID
      • borrowed_at = 借用物品的时间戳
      • returned_at = 时间返回给所有者的时间戳。

    使用此模型,可以直接确保borrower_id 和item.owner_id 不相同,并确保同一项目不能同时借给两个不同的借款人。

    从 SQL 的角度来看,您可以通过执行以下操作找到我不拥有的所有项目(其中 MY_ID 是我的 user.id):

    SELECT * from items where owner_id != MY_ID;
    

    如果您想查找所有不属于我且当前未借用的物品,也许:

    SELECT * from items where owner_id != MY_ID and id not in (select item_id from history where borrowed_at is not null and returned_at is null);
    

    当然,其他语言的语法会有所不同。

    您可以通过六种不同的方式对此进行建模,但在不了解您的用例的情况下,这就是我要开始的地方。

    【讨论】:

    • 您好!感谢您的回复!我不明白的是:那如何确保borrower_id 和item.owner_id 不一样?
    • @lioli - 我更新了我的答案来解决你的问题。
    猜你喜欢
    • 2014-01-12
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多