【发布时间】:2015-01-06 00:26:19
【问题描述】:
我计划创建我的第一个数据库,所以这将是一个新手问题。我的数据库应该用于借贷网络,用户可以在其中借用其他用户的产品。创建一个用户帐户应该足以同时进行借贷。唯一的例外应该是用户不能借用自己提供的产品。
所以我的问题是这两个选项中哪个更好:
拥有一个可以借贷的用户实体。实体名称“用户”。 为借款人和捐赠人设置两个不同的实体以防止用户借用自己的产品?
【问题讨论】:
标签: database entity conceptual
我计划创建我的第一个数据库,所以这将是一个新手问题。我的数据库应该用于借贷网络,用户可以在其中借用其他用户的产品。创建一个用户帐户应该足以同时进行借贷。唯一的例外应该是用户不能借用自己提供的产品。
所以我的问题是这两个选项中哪个更好:
拥有一个可以借贷的用户实体。实体名称“用户”。 为借款人和捐赠人设置两个不同的实体以防止用户借用自己的产品?
【问题讨论】:
标签: database entity conceptual
如果我正确理解您的问题,我会推荐第三种方法:
USER model = 这些是可以借入或借出的用户ITEM model = 这标识了可以借用的物品以及它们的所有者
owner_id = 引用 USER 对象的 ID。HISTORY model = 跟踪借贷历史,可能包括以下内容:
item_id = 引用 ITEM 的 id borrower_id = 引用了借用该项目的 USER 的 IDborrowed_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);
当然,其他语言的语法会有所不同。
您可以通过六种不同的方式对此进行建模,但在不了解您的用例的情况下,这就是我要开始的地方。
【讨论】: