我正在构建一个基于6个不同因素跟踪库存的类型化清单表。我正在使用类似于这个的I查询:
INSERT INTO inventory ( productid, factor1, factor2, factor3, factor4, factor5, factor6, quantity, serial_number)
VALUES (242332,1,1,1,'V67',3.30,'NEW',10,NULL)
ON DUPLICATE KEY UPDATE `quantity` = VALUES(`quantity`) + quantity;
CREATE TABLE inventory ( |
id INT(11) NOT NULL AUTO_INCREMENT, |
productid INT(11) NOT NULL, |
factor1 FLOAT(10,2) DEFAULT '0.00', |
factor2 FLOAT(10,2) DEFAULT '0.00', |
factor3 FLOAT(10,2) DEFAULT '0.00', |
factor4 FLOAT(10,2) DEFAULT '0.00', |
factor5 FLOAT(10,2) DEFAULT '0.00', |
factor6 FLOAT(10,2) DEFAULT '0.00', |
serial_number VARCHAR(100) NOT NULL, |
PRIMARY KEY (id), |
UNIQUE KEY product_factors_serial (productid,factor1,factor2,factor3,factor4,factor5,factor6,serial_number) |
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; |
CREATE TABLE `inventory` (
`stockid` int(11) unsigned NOT NULL AUTO_INCREMENT,
`productid` int(11) unsigned NOT NULL,
`factor1` int(11) unsigned NOT NULL,
`factor2` int(11) unsigned NOT NULL,
`factor3` int(11) unsigned NOT NULL,
`factor4` varchar(8) NOT NULL,
`factor5` decimal(10,2) NOT NULL,
`factor6` enum('A','B','C','D','NEW') NOT NULL,
`quantity` int(11) NOT NULL,
`stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`serial_number` varchar(11) DEFAULT NULL,
PRIMARY KEY (`stockid`),
UNIQUE KEY `serial_number` (`serial_number`),
UNIQUE KEY `productid_2` (`productid`,`factor1`,`factor2`,`factor3`,`factor4`,`factor5`,`factor6`,`serial_number`),
KEY `productid` (`productid`),
KEY `factor1` (`factor1`),
KEY `factor2` (`factor2`),
KEY `factor3` (`factor3`),
CONSTRAINT `books_stock_ibfk_2` FOREIGN KEY (`productid`) REFERENCES `produx_products` (`productid`),
CONSTRAINT `books_stock_ibfk_5` FOREIGN KEY (`factor1`) REFERENCES `table_factor1` (`factorid`),
CONSTRAINT `books_stock_ibfk_6` FOREIGN KEY (`factor2`) REFERENCES `table_factor2` (`factorid`),
CONSTRAINT `books_stock_ibfk_7` FOREIGN KEY (`factor3`) REFERENCES `table_factor3` (`factorid`)
)
ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=latin1
更深入一些:
这个表的目的是为了保存库存数量。我认为这很简单明了。这些数量之间的区别如下:
因素1 = storeid(拥有此数量的商店的唯一标识符)。
因素2 = supplierid(我们得到该数量的供应商的唯一标识符)
因素3 = warehouseid(它所在的仓库的唯一标识符)
因素4 = locationid(位置的唯一字符串。它在货架上被物理绘制出来)
因素5 = cost(我们支付每个数量的费用)
因素6 = condition(枚举 ['NEW','USED','RENTAL','PREORDER']。前三个很容易,第四个是我们订购的数量,想要出售,但尚未收到。)
我知道这是一个繁重的键,但我被迫保持这种方式。我已经听到很多人建议将成本或条件移动到产品表中。我不能这样做。成本并不总是相同的,因为我们从拍卖或其他地方购买很多变化很大的物品。
我希望这有助于更好地解释我的意图。
show create table inventory
- barry-johnson