因此,我有一个由不同的PC组件,一个客户表和一个销售表组成的数据库。我正在尝试找出隐含的方式,当我添加供应商表时,可以根据可用的最便宜的价格为销售商品选择不同的价格。
CREATE TABLE IF NOT EXISTS `mydb`.`customer` (
`customer_id` INT(11) NOT NULL,
`customer_first_name` VARCHAR(45) NULL DEFAULT NULL,
`customer_last_name` VARCHAR(45) NULL DEFAULT NULL,
PRIMARY KEY (`customer_id`))
CREATE TABLE IF NOT EXISTS `mydb`.`sale` (
`sale_id` INT NOT NULL,
`sale_items` INT(3) NOT NULL,
`sale_paid` TINYINT(1) NULL DEFAULT NULL,
`customer_customer_id` INT(11) NOT NULL,
PRIMARY KEY (`sale_id`, `customer_customer_id`),
INDEX `fk_sale_customer1_idx` (`customer_customer_id` ASC),
CONSTRAINT `fk_sale_customer1`
FOREIGN KEY (`customer_customer_id`)
REFERENCES `mydb`.`customer` (`customer_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
我猜我需要在供应商表中使用
vendor_id
和vendor_name
,但是我在哪里分别将我具有cpu
,psu
等的6个组件表的供应商价格放在哪里,我该如何处理?做到这一点时,它出售最便宜的供应商,并显示它是哪一个?我在这里有点新手,所以这就是为什么我要这么多帮助
最佳答案
我认为,关于不同实体的基本相同信息,有6个单独的表是导致您的问题的主要原因。
许多年前,我在一个用于记录工业过程中样本数据的系统上工作,我认为基本原理是相同的。程序逻辑无需区分一种类型的组件的特征与另一种类型的组件的特征,或同一类型的不同特征之间的区别,因此您可以将整个组件表集合抽象为单个“规范”实体。
解决此问题的经典方法是具有以下内容:
components (
component_id primary key
type references component_types
description
etc.)
vendors (
vendor_id primary key,
name
address
etc.)
vendor_catalog (
vendor_id references vendors
component_id references components
vendor_catalog_no
price
etc.
pk(vendor_id, component_id))
characteristics (
specification_id primary key
spec_name
type references component_types
description
units
lower_limit
upper_limit
etc.
specifications (
specification_id references characteristics
component_id references components
vendor_id references vendors
value
pk(component_id, vendor_id, specification_id)
index(component_id, specification_id) not unique
以上内容不一定完整;我留给您填写数据类型,其他字段和&c。以及
component_types
查找表。对于某些外键,将存在同样有效的替代选择,并且
specifications
上的额外非唯一索引是一种早期优化,可能被证明是不必要的。也。整个架构是我一时兴起的东西,绝不应该被当作福音。关于mysql - MySQL中的供应商表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34253638/