我有三张桌子 用户表
CREATE TABLE IF NOT EXISTS `user` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(25) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8_unicode_ci;
项目表
CREATE TABLE IF NOT EXISTS `item` (
`item_id` int(11) NOT NULL AUTO_INCREMENT,
`item` varchar(20) NOT NULL,
`price` int(3) DEFAULT NULL,
`likes` int(4) DEFAULT NULL,
PRIMARY KEY (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8_unicode_ci;
订单表
CREATE TABLE IF NOT EXISTS `order` (
`user_id` int(11) DEFAULT NULL,
`order_no` varchar(50) DEFAULT NULL,
`item1` varchar(5) DEFAULT NULL,
`item2` varchar(5) DEFAULT NULL,
`item3` varchar(5) DEFAULT NULL,
`item4` varchar(5) DEFAULT NULL,
`item5` varchar(5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8_unicode_ci;
我将item_id
存储在item1
或item2
中,依次存储在订单表中。我只提供5个项目可以由用户选择,但他们可以增加任何项目的数量,如任何用户订单两个数量item1
如何将其存储在数据库中。
以及任何改进表格的建议。
答案 0 :(得分:2)
每个订单允许无限数量项目的最佳方法是使用另一个表格:
=SUMPRODUCT(--(B:B=Q63)*(E:E>0)*(F:F>0)*(E:E>F:F))
从订单表中删除五个CREATE TABLE IF NOT EXISTS `orderitem` (
`order_no` varchar(50),
`itemid` INT,
`qty` INT NOT NULL DEFAULT 1,
`price` NUMERIC(9,2) NOT NULL,
PRIMARY KEY (order_no, itemid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8_unicode_ci;
列。
当用户将项item
添加到上表时。因此,您对每个订单的商品数量没有限制。
只要您拥有多对多关系,此设计就是必需的。使用五列不是一个好主意,这会产生一个不方便的限制(如你所知)。
如果您想允许用户增加给定订单项的数量,请在此表中添加INSERT
列。当他们选择添加更多数量的之前选择的相同项目时,请增加qty
。
此表格中还需要qty
列。您需要记录当前订单中为该项目支付的价格,因为明天价格可能会发生变化。
重新评论:
price
阅读有关http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html的文档,了解其作用。
答案 1 :(得分:0)
一个建议是不要定义自己的id字段,除非你有一个非常具体的原因。大多数数据库都可以为您跟踪。如果你想定义自己的约束,你应该添加一个唯一的约束,和/或自动递增它。
我可能不理解这个问题,但听起来您希望能够更改项目中的值?我不太确定你在使用什么,但这里是sql documentation