因此,我有一个由不同的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_idvendor_name,但是我在哪里分别将我具有cpupsu等的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/

10-11 02:17