gpt4 book ai didi

mysql - "products can be made of many products"的数据库结构

转载 作者:行者123 更新时间:2023-11-29 12:59:03 28 4
gpt4 key购买 nike

我们正在构建一个网络数据库系统,我们需要允许某些产品由其他产品制成。例如,将 2 个或多个产品组合为新产品。我们正在使用 CakePhp 和 MySQL。

这是我们数据库的数据结构图: https://www.dropbox.com/s/ksv22rt45uv69k9/Data%20Structure%20Diagram.png

我们是否需要自引用产品表或创建一个新表?

最佳答案

两者都可以。两者都有优点和缺点。无论哪种方式,您都需要一个交叉引用表。

交叉引用表可以引用自身。

项目中的产品

+---------------------+----------------------------+------------+
| product_identifier | product_identifier_child | quantity |
+---------------------+----------------------------+------------+
| 1 | 1 | 1 |
| 2 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 2 | 1 |
+---------------------+----------------------------+------------+

好的一面是,这种方法意味着您只有一个数据表和一个新的交叉引用表,并且您可以添加您认为合适的新产品(以及多个相同的产品,例如,带有礼物)篮子)。不利的一面是,您的 table 将尝试同时做两件不同的事情。包含其他产品的产品可能没有型号。另外,您如何确定是否检查inventory表?您是否打算为由产品制成的产品建立库存,或者您是否会尽快检查单个产品的库存,以查看您的组合产品是否有库存?后者更加灵活,您仍然可以通过这种方式保留库存。它只是允许您的所有库存在库存表中采用相同的单位规模。

为了增加更大的灵 active ,您可以创建另一个表,基本产品,其中只有构建 block 产品才会具有值。

基础产品

+--------------------------+----------+--------------+
| base product identifier | brand | model number |
+--------------------------+----------+--------------+

然后,您可以将库存附加到基本产品表,并且您的交叉引用表将是产品基本产品

这里的缺点是,现在你有三个表,而不是两个表。然而,由于灵 active 的提高,我喜欢更多的表和更少的列。即使表任务并非完全不同,让每个表完全特化也可以使事情变得容易得多。

有很多种方法可以选择,但最佳情况是不需要数据重复且没有 NULL 值的方法。不要因为一路走来而给自己带来压力,请尝试将 NULL 值排除在索引列之外,并确保您的名称值仅显示在一个位置。

关于mysql - "products can be made of many products"的数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23589505/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com