好的,所以我有这个问题,我需要实现......这是我的site
我需要做的是每售出一件产品,我需要另外两种产品升级或降级。
所以每个产品都有3类标准,商业和高级,并根据当前产品的价格增加或减少..
基本上他们正在定制每个解决方案。所以我需要的是找出构建我的数据库的最佳方法...这里是我用来拉动我现在拥有的查询
$query = "SELECT p.ProductName, p.price, pc.quantity, p.ProductImage, p.Features
FROM productinfo as p
join preconfig_categories as pc on p.ProductID = pc.product_id
join preconfig as c on c.id = pc.category_id
join subcategory as sc on p.SubCategoryID = sc.SubCategoryID
WHERE c.code = '{$type}_{$count}_{$class}'
order by sc.ordering";
我在productinfo表中考虑的是当前结构如此
CREATE TABLE `productinfo` (
`ProductID` int(11) NOT NULL AUTO_INCREMENT,
`ProductName` varchar(255) NOT NULL,
`ProductImage` varchar(255) NOT NULL,
`CategoryID` int(11) NOT NULL,
`SubCategoryID` int(11) NOT NULL,
`ProductBrief` varchar(255) NOT NULL,
`Features` text NOT NULL,
`Specifications` text NOT NULL,
`Reviews` text NOT NULL,
`Price` varchar(255) NOT NULL,
`Status` tinyint(4) NOT NULL,
`PartName` varchar(255) NOT NULL,
`skip_step` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`ProductID`)
) ENGINE=MyISAM AUTO_INCREMENT=164 DEFAULT CHARSET=latin1;
我在想添加三个额外的字段
class
product1
product2
所以基本上我可以使用该类来告诉当前产品是什么,然后另外两个字段product1和product2将具有其他两个产品的ProductID ....这似乎可以工作但我觉得那可能是一个更好的解决方案然后可以更好地工作....任何想法输入将非常感激
答案 0 :(得分:4)
我建议有一张包含产品信息的表格。第二个表格,其中包含产品类别(标准,商业,高级),然后是第三个表格,您可以将客户的购买地图映射到产品信息ID和产品类别ID。
因此,如果您需要在将来添加新类别的产品(免费软件,Premium Deluxe等),您只需将其添加到产品类表中,然后您可以将其映射到映射表中。
因此,当客户购买产品时,您会在映射表中映射产品ID和产品类ID。如果它们降级,则更新映射表以立即将产品ID映射到降级的产品类ID。
答案 1 :(得分:2)
一些问题......
如果可以通过逻辑确定关联产品,我认为值得考虑不将额外字段添加到products表中,而是通过查询按需解析关联。原因在于,如果产品的某些标准发生变化,例如价格......那么它可能不再被视为当前引用它的产品的升级或降级......然后您就会遇到数据不一致的问题
- 编辑 -
感谢您的回答。因此,如果手动选择产品关联,并且每个产品将具有2个且仅有两个关联,那么您的初始设计对我来说看起来很好(我只能确保添加FK)。但是,如果您认为某天产品可能具有可变数量的关联...就像一个产品只有一个替代品,而另一个产品可能有4个替代品,那么我可能会将关联放入一个单独的表中。有点像...
CREATE TABLE `associatedproduct` (
`ProductID` int(11),
`AssociatedProductID` int(11)
)
这样一来,产品必须具有两种关联才能一成不变。您还可以在此表中添加可以描述两个产品之间关联的其他列...例如产品“A”是升级,而产品“B”是高级升级。