数据库模型所需的建议 - 附有部分 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 表,列有Iduser_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_idt.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 中使用多个数据库,如何仅迁移所需的模型表

如何从 MySQLWorkbench EER 模型 (ERD) 转到 Django?

无法匹配 Keras LSTM 模型所需的维数

“FromSql”操作的结果中不存在所需的列

水晶报告:无法确定获取此报告数据所需的查询

选择文本所需的 XPath 建议