【问题标题】:Trying to understand DB relationship approach between various tables试图了解各种表之间的数据库关系方法
【发布时间】:2017-02-11 15:41:06
【问题描述】:

需要了解数据库结构是否准确? 假设有客户/产品/产品事件

每个客户可以有多个产品,但一个产品不能有多个客户,每个产品也可以有多个事件

这就是我的例子

customers           products                            product_events
-----------     ------------------------------      ------------------------
id | name           id | customer_id | name             id | product_id | event_title

我猜这是一个 => 多个关系

但这里可能有大量产品,其中一些或者说其中许多(产品)可能没有分配给客户(换句话说,没有卖给客户)

因此,将产品列表和客户产品列表分开是一个很好的选择 是否有任何中间表来定义产品与客户的关系?

那么这个结构怎么样

customers           products        customer_products                   
-----------     ---------------     ------------------------------      
id | name           id | name       id | customer_id | product_id   

product_events
---------------------
id | product_id | event_title

对于这些结构的大部分用途,将按特定客户获取产品事件列表

【问题讨论】:

    标签: mysql database database-design orm foreign-keys


    【解决方案1】:

    products 表中有一个customer_id 列意味着只有一个客户可以拥有特定的产品 - 例如,您和我不能都购买同一型号的笔记本电脑,这听起来不太对。

    拥有一个中间 customer_products 表听起来是正确的方法。

    【讨论】:

    • 但是兄弟,主要是同一型号的产品只能卖给一个客户,在这个例子中产品的型号是唯一的
    • @MuhammadNawazMemon 在这种情况下,您能否澄清您对原始方法的担忧?如果每个产品都可以只属于一个客户,那么这似乎是正确的选择。对于未售出的产品,只需使用 null
    • 对,这就是我目前拥有的......但我无法在产品表中将 foreign_key 设置为 customer_id,因为它可以为空......因为产品未售出......该怎么办这个案子?
    • 您绝对可以在包含nulls 的列上有一个外键。外键意味着该列不允许具有它所引用的列中不存在的 Null 不是一个值 - 如果你愿意的话,它是它的缺失和“空值”。
    【解决方案2】:

    通过考虑“客户”和“产品”表,两个表之间存在多对多关系。因此您需要创建第三张表来维护关系。第三个表应该包括两个关系表的主键和其他因关系而骨化的属性。 第三个表的主键应该是关系表中两个键的组合。

    【讨论】:

    • 在多:多表中,不需要id。见我的tips
    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多