mysql - 数据库模型所需的建议 - 附加部分 EER

标签 mysql database cakephp database-design mysql-workbench

我开始学习cakephp 3,这将是我的学习项目。 应用的理念是每个用户可以拥有许多产品,并且用户可以在它们之间进行产品交易。 工作流程:

  • 因此,一个用户可以访问另一用户的个人资料,并且可以点击按钮进行交易。这将显示两个用户的所有产品,但会单独显示每个用户的产品。
  • 用户现在可以选择他的一种或多种产品,并且他还必须选择其他用户的一种或多种产品才能开始交易
  • 另一位用户将收到通知,告知他有交易报价,并且他必须做出回应。他现在可以选择接受、拒绝或更改交易
  • 如果接受的交易被“锁定”
  • 如果被拒绝的交易被“锁定”
  • 如果用户点击更改交易,那么他必须重新选择他和其他用户的产品并提交。这是我们回到第 3 点的地方

这是迄今为止我的数据库设计,但我认为这不是最好的解决方案,所以我希望你们能向我建议更好的解决方案(如果你们有的话) Db design

如果我总结一下一切。 当交易发生时,我需要知道谁在与谁交易什么(多种产品)以及哪轮接受、拒绝或重新选择贸易产品。我也在寻找可能更有意义的专栏名称。从那时起,用户的角色发生了变化,请求产品的用户现在处于待处理状态,反之亦然。

如果您需要任何其他信息,请告诉我,我会提供。预先感谢您

最佳答案

我想您还有 products 表,其中包含 Iduser_id 等列。

根据最后的评论,您当前的架构似乎不支持将 1 个产品交易到 10 个产品。为了支持这一点,我建议将表 products_users_trades 替换为 products_trades code> 包含以下列:Idproduct_idtrade_idcreated_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 列将作为新产品的标识符。

关于mysql - 数据库模型所需的建议 - 附加部分 EER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41857583/

相关文章:

image - CakePHP 如何在数据库中存储图像并显示它?

php - MySql分页; "Showing result-set"帮助的 "total found"

mysql - 具有多个网站的集中数据库

mysql - 开放层 : How to create markers based on a MySQL database

mysql - 数据模型和应用程序逻辑问题?

database - Cakephp,不要使用数据库表

MySQL在Join语句中创建动态表名

mysql - 两个表的sql查询: Consumed time

Java:程序无法连接时调用方法

mysql - CakePHP 3.x 保存新记录以及新的关联记录