我有两张桌子
table: people id name goods_owned 1 john 1,4,3 2 Mike 2,5 3 Sam 1,5,2 4 Andy 5,3,4
–
table goods: g_id g_name g_class 1 sugar food 2 salt food 3 boat transp 4 house habitation 5 car transp
这是餐具的简单例子,其实际上非常长并且人们中的每个人可以分配给他的多个商品,例如汽车,船,糖等没有一个人可以拥有多少和它完全随机的限制.我找不到更好的方法来存储它而不是昏迷分离,例如1,3
我有问题做出我需要的选择,例如
SELECT people.*,goods.name FROM people LEFT JOIN goods ON goods.g_id = people.goods_owned WHERE name = "Sam"
然而问题是goods_owned在单元格中有多个商品ID,他们需要以某种方式分解才能得到答案:
1,Sam,sugar,car,salt
解决方法
一个人可以与零,一个或多个商品相关.
好的可以与零,一个或多个人有关.
好的可以与零,一个或多个人有关.
那是多对多的关系.
通常,我们通过创建第三个表来处理这个问题,这是一个指向其他两个表的“关系”
table: goods_owned people_id goods_id 1 1 1 4 1 3 2 2 2 5 3 1 3 5 3 2 4 5 4 3 4 4
这两列的组合可以指定为唯一,并可以作为表的主键.每列可以定义为父表的外键.
CREATE TABLE goods_owned ( people_id INT UNSIGNED NOT NULL,goods_id INT UNSIGNED NOT NULL,PRIMARY KEY (people_id,goods_id),KEY FK_goods_owned_people (people_id),KEY FK_goods_owned_goods (goods_id),CONSTRAINT FK_goods_owned_people FOREIGN KEY (people_id) REFERENCES people (id),CONSTRAINT FK_goods_owned_goods FOREIGN KEY (goods_id) REFERENCES goods (g_id) ) ;
另一种选择,如果“商品”集是静态且定义良好的,并且不需要在表中表示,那么您可以使用MysqL SET数据类型,并且只有一个表.但是这种方法只适用于集合是静态的(不需要更改).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。