一个好的数据库架构

时间:2011-04-12 16:15:07

标签: php mysql sql database database-design

好的,所以我有这个问题,我需要实现......这是我的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 ....这似乎可以工作但我觉得那可能是一个更好的解决方案然后可以更好地工作....任何想法输入将非常感激

2 个答案:

答案 0 :(得分:4)

我建议有一张包含产品信息的表格。第二个表格,其中包含产品类别(标准,商业,高级),然后是第三个表格,您可以将客户的购买地图映射到产品信息ID和产品类别ID。

因此,如果您需要在将来添加新类别的产品(免费软件,Premium Deluxe等),您只需将其添加到产品类表中,然后您可以将其映射到映射表中。

因此,当客户购买产品时,您会在映射表中映射产品ID和产品类ID。如果它们降级,则更新映射表以立即将产品ID映射到降级的产品类ID。

答案 1 :(得分:2)

一些问题......

  1. 如果显示的产品是标准产品,它是否只显示商家和优质产品?如果产品已经是最低价,它只是显示升级......如果它是溢价,它是否只显示降级?如果没有,它是否会显示不同类别的产品,以便始终显示一次升级和一次降级?
  2. 如何确定哪些产品与其他产品相关联?这是以编程方式确定的,还是有人只是手动选择哪些产品相关联?
  3. 如果可以通过逻辑确定关联产品,我认为值得考虑将额外字段添加到products表中,而是通过查询按需解析关联。原因在于,如果产品的某些标准发生变化,例如价格......那么它可能不再被视为当前引用它的产品的升级或降级......然后您就会遇到数据不一致的问题

    - 编辑 -

    感谢您的回答。因此,如果手动选择产品关联,并且每个产品将具有2个且仅有两个关联,那么您的初始设计对我来说看起来很好(我只能确保添加FK)。但是,如果您认为某天产品可能具有可变数量的关联...就像一个产品只有一个替代品,而另一个产品可能有4个替代品,那么我可能会将关联放入一个单独的表中。有点像...

    CREATE TABLE `associatedproduct` (
      `ProductID` int(11),
      `AssociatedProductID` int(11)
    )
    

    这样一来,产品必须具有两种关联才能一成不变。您还可以在此表中添加可以描述两个产品之间关联的其他列...例如产品“A”是升级,而产品“B”是高级升级。