我们正在建立一个网络数据库系统,我们需要允许一些产品是由其他产品。例如,将两个或更多个产品合并为一个新产品。我们使用的是CakePhp和MySQL。
以下是我们数据库的数据结构图:https://www.dropbox.com/s/ksv22rt45uv69k9/Data%20Structure%20Diagram.png
我们需要自引用产品表还是创建一个新表?
发布于 2014-05-11 14:52:54
这两种你都可以。两者各有优缺点。无论哪种方式,您都需要一个交叉参考表。
交叉参考表可以自己引用。
产品在项目中
+---------------------+----------------------------+------------+
| product_identifier | product_identifier_child | quantity |
+---------------------+----------------------------+------------+
| 1 | 1 | 1 |
| 2 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 2 | 1 |
+---------------------+----------------------------+------------+好的一面是,这种方法意味着您只有一个数据表和一个新的交叉参考表,您可以根据自己的需要添加新产品(以及多个相同的产品,例如,一个礼品篮)。不利的一面是,你的桌子将尝试同时做两件不同的事情。有其他产品的产品可能没有model number。此外,您将如何确定是否检查inventory表?对于由产品制成的产品,您会使用inventory吗?还是您会更早地检查单个产品的库存,以确定您的组合产品是否有库存?后者要灵活得多,而且你仍然可以以这种方式储备库存。它只允许您的所有库存在相同的单位规模在您的库存表。
为了增加更多的灵活性,您可以创建另一个表base products,它只具有构建块产品将要拥有的值。
基础产品
+--------------------------+----------+--------------+
| base product identifier | brand | model number |
+--------------------------+----------+--------------+然后,您可以将您的库存附加到您的base products表中,您的交叉参考表将是products到base products。
负面的是,现在不是两张桌子,而是三张。然而,由于灵活性的提高,我更喜欢更多的表和更少的列。即使表任务并没有完全不同,让每个表完全专业化也可以使事情变得简单得多。
有许多方法可走,但最优的情况是不需要数据复制和空值。在不强调自己一路走来的情况下,尽量将NULL值从索引列中删除,并确保您的名称值只出现在一个位置。
https://stackoverflow.com/questions/23589505
复制相似问题