Php 一个好的数据库模式
好的,所以我有这个问题,我需要实现…这是我的 我需要做的是,对于售出的每个产品,我需要另外两个产品,要么升级,要么降级 因此,每种产品都有三个等级:标准、商业和溢价,根据当前产品的不同,它们的价格会有所增减 因此,他们基本上是定制每个解决方案。所以我需要的是找出最好的方法来构造我的数据库…这里是我用来提取我现在拥有的查询Php 一个好的数据库模式,php,mysql,sql,database,database-design,Php,Mysql,Sql,Database,Database Design,好的,所以我有这个问题,我需要实现…这是我的 我需要做的是,对于售出的每个产品,我需要另外两个产品,要么升级,要么降级 因此,每种产品都有三个等级:标准、商业和溢价,根据当前产品的不同,它们的价格会有所增减 因此,他们基本上是定制每个解决方案。所以我需要的是找出最好的方法来构造我的数据库…这里是我用来提取我现在拥有的查询 $query = "SELECT p.ProductName, p.price, pc.quantity, p.ProductImage, p.Features
$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…这似乎可以工作,但我觉得可能有一个更好的解决方案,然后可以工作得更好一些…任何想法输入都会非常有用非常感谢我建议有一张包含产品信息的表格。第二个表包含产品类别(Standard、Business、Premium),然后第三个表将客户的购买映射到产品信息ID和产品类别ID 因此,如果将来需要添加新的产品类别(免费软件、高级豪华版等),只需将其添加到产品类别表中,然后就可以在映射表中映射它 因此,当客户购买产品时,您需要在映射表中映射产品ID和产品类ID。如果他们降级,您将更新映射表,现在将产品ID映射到降级的产品类别ID。几个问题
CREATE TABLE `associatedproduct` (
`ProductID` int(11),
`AssociatedProductID` int(11)
)
这样就不会一成不变地认为一个产品必须有两个关联。您还可以在此表中添加其他列,这些列可以描述两个产品之间的关联。。。就像产品“A”是一种升级,而产品“B”是高级升级。所以要回答第一个问题……是的,如果产品是标准的,它将显示业务和高级,如果产品是业务的,它将显示标准和高级……是的,如果它是高级的,那么是的,它只显示降级来回答第二个问题……所以我现在有一个所有产品的csvcsv拥有所有其他产品,因此不以编程方式回答它……它们被设置在霍根先生答案的扩展中:在ProductClasses表中放置一个序列字段,以便您可以识别哪些产品是升级的,哪些是降级的。添加一个完整的“另一个”表似乎是额外的工作,但您添加额外字段的想法无法很好地扩展。正如Horgan所指出的,总有一天您几乎肯定会需要第四个产品级别。因此,假设我有一个ProductClasses表……对于ProductClasses表,哪些字段最适合这样做?我建议您有ProductClassName(Standard、Business等)和一个ProductClassId整数,不能为NULL。在映射表中,您将映射ProductClassID、ProductTypeId和客户端事务id或客户端id。