首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“产品可以由多种产品组成”的数据库结构

问“产品可以由多种产品组成”的数据库结构
EN

Stack Overflow用户
提问于 2014-05-11 06:06:04
回答 1查看 402关注 0票数 0

我们正在建立一个网络数据库系统,我们需要允许一些产品是由其他产品。例如,将两个或更多个产品合并为一个新产品。我们使用的是CakePhp和MySQL。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-11 14:52:54

这两种你都可以。两者各有优缺点。无论哪种方式,您都需要一个交叉参考表。

交叉参考表可以自己引用。

产品在项目中

代码语言:javascript
复制
+---------------------+----------------------------+------------+
| product_identifier  |   product_identifier_child |   quantity |
+---------------------+----------------------------+------------+
|          1          |              1             |    1       |
|          2          |              1             |    1       |
|          2          |              2             |    2       |
|          3          |              2             |    1       |
+---------------------+----------------------------+------------+

好的一面是,这种方法意味着您只有一个数据表和一个新的交叉参考表,您可以根据自己的需要添加新产品(以及多个相同的产品,例如,一个礼品篮)。不利的一面是,你的桌子将尝试同时做两件不同的事情。有其他产品的产品可能没有model number。此外,您将如何确定是否检查inventory表?对于由产品制成的产品,您会使用inventory吗?还是您会更早地检查单个产品的库存,以确定您的组合产品是否有库存?后者要灵活得多,而且你仍然可以以这种方式储备库存。它只允许您的所有库存在相同的单位规模在您的库存表。

为了增加更多的灵活性,您可以创建另一个表base products,它只具有构建块产品将要拥有的值。

基础产品

代码语言:javascript
复制
+--------------------------+----------+--------------+
|  base product identifier |  brand   | model number |
+--------------------------+----------+--------------+

然后,您可以将您的库存附加到您的base products表中,您的交叉参考表将是products到base products。

负面的是,现在不是两张桌子,而是三张。然而,由于灵活性的提高,我更喜欢更多的表和更少的列。即使表任务并没有完全不同,让每个表完全专业化也可以使事情变得简单得多。

有许多方法可走,但最优的情况是不需要数据复制和空值。在不强调自己一路走来的情况下,尽量将NULL值从索引列中删除,并确保您的名称值只出现在一个位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23589505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档