【问题标题】:One to Many relationship real life example一对多关系现实生活示例
【发布时间】:2020-10-15 15:49:47
【问题描述】:

我正在尝试设计架构。我对应该使用一对多还是多对一关系感到困惑。

我的用例有点像顾客点餐。 有 2 位顾客和 5 种食物

Customers: [John, Alice]

Food: [Rice, Noodle, Chicken, Beacon, Ice-cream]

用例:一个客户可以订购许多商品,但如果第一个客户订购了该商品,则其他客户无法订购。

例子:

    John orders  ->  Rice, Noodle, Chicken
    Alice orders -> Beacon, Ice-cream
**This is valid, both customers ordered unique food.**

例子:

    John orders  -> Rice, Noodle, Chicken
    Alice orders -> Beacon, Ice-cream, Chicken
**This is invalid, because Chicken is being ordered twice. John Already ordered chicken so Alice can not order it.**

注意:我正在 mongodb 文档中尝试这样做,并尝试使用 Django 模型建立关系。

【问题讨论】:

    标签: django mongodb django-models database-design database-schema


    【解决方案1】:

    处理这个问题的一种方法是创建一个 junction 表 CustomerFood,它看起来像这样:

    CREATE TABLE CustomerFood (
        Customer varchar(255) NOT NULL,
        Food varchar(255) NOT NULL,
        PRIMARY KEY(Customer, Food)
    );
    

    仅上面的表格定义只能确保每个顾客最多只能与每种食物关联一次。为了强制执行给定食物只能与一个客户相关联的附加限制,我们可以在 Food 列上添加唯一约束:

    ALTER TABLE CustomerFood ADD CONSTRAINT food_unique UNIQUE (Food);
    

    【讨论】:

      【解决方案2】:

      使用 Django 模板:

      1. 您可以在 django 中使用多对多(代码越少,理解起来越复杂)或在 中间方法”(需要更多模型代码的更多手动方法)。 Django many to many documentation
      2. 其次,您应该使用验证器 确保你的逻辑是一个人只能点一道菜,并且 菜会卖光,这是更多的编程逻辑,可以成为一部分 的验证者。 Django validators documentation

      【讨论】:

        猜你喜欢
        • 2013-11-11
        • 2011-02-24
        • 2012-12-28
        • 2015-02-06
        • 2017-04-08
        相关资源
        最近更新 更多