如何使用Sales Table MySql构建数据库

时间:2015-05-24 17:05:41

标签: mysql database schema

我有一个销售表,我想记录员工完成的所有销售。 我遇到的问题是我只能存储一个来自Products表的ProductId。有问题的是,销售产品是产品的倍数,而我目前的结构只能存储一个ProductId。我知道我的方法是错的,但我不知道如何正确修复它。我的问题是如何在销售表中存储多个产品。

这是我的销售表列。

CREATE TABLE `Sales` (
`SaleId` int(11) unsigned NOT NULL AUTO_INCREMENT,
`EmployeeId` int(11) unsigned NOT NULL,
`ProductId` int(11) unsigned NOT NULL,
PRIMARY KEY (`SaleId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

3 个答案:

答案 0 :(得分:1)

您需要第二个表,即Sales-Product表:

CREATE TABLE `SaleProduct` (
`SaleId` int(11) unsigned NOT NULL,
`ProductId` int(11) unsigned NOT NULL,
`Quantity` int(11) unsigned NOT NULL,
PRIMARY KEY (`SaleId`, `ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

并更改您的销售表:

CREATE TABLE `Sales` (
`SaleId` int(11) unsigned NOT NULL AUTO_INCREMENT,
`EmployeeId` int(11) unsigned NOT NULL,
PRIMARY KEY (`SaleId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

答案 1 :(得分:1)

你的桌子和方法还可以。 您只需在每个product-id的sales表中插入一行。 销售的唯一关键是SaleId, 员工和产品的外键也在那里。

表中唯一缺少的是销售数量和金额。

这是典型的n:m问题,由V结构解决。

答案 2 :(得分:0)

我建议的第二种方式更“标准”,但由于我不知道你如何查询表及其大小,第一种方法可能(?)有用

  1. 将所有prod_id连接成一个字符串,使用regexp
  2. 获取它们

    示例:prod_id = 13_07_255_23_11

    SELECT * FROM Sales WHERE ProductId REGEXP'(^ | )23( | $)';

    1. 将单个商品拆分为多个商品,将sales_id和product_id设为您的组合唯一/主键