数据库模型所需的建议 - 附有部分 EER
Posted
技术标签:
【中文标题】数据库模型所需的建议 - 附有部分 EER【英文标题】:Advice Needed For Database Model - Partial EER Attached 【发布时间】:2017-06-10 23:41:21 【问题描述】:我开始学习 cakephp 3,这将是我的学习项目。 应用的思想是每个用户可以拥有许多产品,并且用户可以在他们之间进行产品交易。 工作流程:
所以一个用户可以访问另一个用户的个人资料,他可以点击按钮交易。这将显示两个用户的所有产品,但每个用户分别显示。 用户现在可以选择他的一种或多种产品,他还必须选择一种或多种其他用户产品才能开始交易 另一个用户将收到通知,他有交易报价,他必须做出回应。他现在可以选择接受、拒绝或更改交易 如果接受的交易被“锁定” 如果被拒绝的交易被“锁定” 如果用户点击更改交易,那么他必须重新选择他和其他用户的产品并提交。这就是我们回到第 3 点的地方到目前为止,这是我的数据库设计,但我认为这不是最好的解决方案,所以我希望你们能提出更好的解决方案,如果你们有的话
如果我总结一切。 当交易发生时,我需要知道谁在与谁交易什么(多种产品),以及接受、拒绝或重新选择交易产品。我也在寻找更有意义的列名称。由于在某些时候用户的角色发生了变化,并且请求产品的角色现在处于待处理状态,反之亦然。
如果您需要任何其他信息,请告诉我,我会提供。提前谢谢你
【问题讨论】:
旁白:Advice on many:many schema 交易后用户产品会怎样?我的意思是,如果用户 1 拥有产品 A、B、C,而用户 2 拥有产品 D、E。并且交易是在产品 A、B 和 D、E 之间进行的。因此,成功交易后,用户 1 将拥有 D、E、C 产品和用户 2 - A、B? “锁定”是什么意思?也许,在交易被接受或拒绝之前,交易产品被锁定以进行另一次新交易。 1.问题... 是的,这是一个想法 2. 问题... 锁定意味着此交易结束... 正是您所写的... 交易产品被锁定以进行另一次新交易,直到交易被拒绝。如果接受的产品在用户之间交换...... 另一个问题。可以在不同的产品编号之间进行交易吗?例如,产品 A、B 和产品 C、D、E 之间的贸易(2 件产品换 3 件产品)? 【参考方案1】:我想你也有products
表,列有Id
、user_id
等等。
根据最后的 cmets,您当前的架构似乎不支持将 1 个产品交易到 10 个。为了支持这一点,我建议将表 products_users_trades
替换为 products_trades
列:Id
,@ 987654327@, trade_id
, created_date
.
所以,让我们考虑一下您的工作流程,添加一些我认为可能的步骤以及您的架构将如何使用:
1.供用户展示其产品的交易:
select t.id, p.name, t.user_id, t.user_id1 from trades as t
inner join product_trades as pt
on t.user_id = pt.trade_id or t.user_id1 = pt.trade_id
inner join products as p on p.id = pt.product_id
where t.user_id = 1 or t.user_id1 = 1
您可以在此处使用t.user_id
、t.user_id1
列来确定哪些产品是您的或不是您的,以及您提供或为您提供的产品。
2.显示可以交易的产品:
select * from products as p
where p.user_id = 1 and p.id not in
(select pt.product_id from trades as t
inner join product_trades as pt on t.id = pt.trade_id
where t.status_id = 1 and (t.user_id = 1 or t.user_id1 = 1))
这里的 status_id = 1 表示新的锁定交易。要释放锁定,您需要将状态更改为接受或拒绝。
3.创建交易:
-- create a trade
insert into trades (status_id, user_id, user_id1) values (1, 1, 2);
-- insert all products in trade
insert into product_trades (product_id, trade_id) values (1, 1);
insert into product_trades (product_id, trade_id) values (1, 2);
4.检查用户是否可以接受或拒绝交易 - 检查该交易是否有 user_id1 = 他的用户 id
5.接受或拒绝交易 - 更改交易状态。
6.修改交易 - 更改交易修改数据并删除所有product_trades
并创建新的。如果您需要在贸易中显示更改的产品,则只需删除更改的产品,created_date
列将是新产品的标识符。
【讨论】:
以上是关于数据库模型所需的建议 - 附有部分 EER的主要内容,如果未能解决你的问题,请参考以下文章
如果在 django 中使用多个数据库,如何仅迁移所需的模型表