我计划创建我的第一个数据库,这将成为一个新手问题。我的数据库应该是借阅借贷网络,用户可以借用其他用户的产品。创建一个用户帐户应该足以能够借入和借出同一时间。唯一的例外是用户不能借用他自己提供的产品。
所以我的问题是这两个选项中哪一个更好:
为用户提供一个可借入和借出的实体。实体名称" USER"。 为借款人和提供者设两个不同的实体,以防止用户借用他自己的产品?
答案 0 :(得分:1)
如果我理解你的问题,我会推荐第三种方法:
USER
model =这些是可借入或借出的用户ITEM
model =这标识了可以借用的项目以及拥有它们的人员
owner_id
=引用USER
对象的ID。HISTORY
model =跟踪贷款历史记录,可能包含以下内容:
item_id
=引用ITEM
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);
当然,其他语言的语法也不同。
您可以通过六种不同的方式对此进行建模,但在不了解您的用例的情况下,这就是我要开始的地方。