想象一下,你有三种物体类型:人物,篮子和水果。
每个人有0到N个篮子,每个篮子有1到N个水果。篮子和水果的顺序无关紧要。多人可以连接到同一个篮子,同样适用于篮子和水果。
典型的查询是:
基于(随机)选择一种或多种水果:哪些篮子是这些水果选择的子集。 e.g:
Selection: [apple, banana]
Basket1: [apple] - matches
Basket2: [banana] - matches
Basket3: [apple, banana] - matches
Basket4: [apple, orange] - does not match
哪些人获得了上述查询匹配的购物篮。
Person1: [Basket1, Basket3, Basket4]
Person2: [Basket2]
Selection: [apple, banana]
Results: [Person1, Basket1]
[Person1, Basket3]
[Person2, Basket2]
列出一个人的篮子和水果
我对这个数据结构建模的想法如下:
TABLE persons
-------------
id
name
TABLE fruits
-------------
id
name
TABLE persons_baskets (N-N)
------------------------------
person_id
basket_id
TABLE baskets_fruits (N-N)
------------------------------
basket_id
fruit_id
大气压。 basket ID是一个随机整数,以避免在并行事务期间发生冲突。其他ID会自动递增。
问题:
答案 0 :(得分:3)
额外的购物篮表会更好。在您的解决方案中,basket_id是一个外键,但您没有与之关联的主键(id_basket或id_pk_basket)。 另外一个表格使得向篮子添加数据(如篮子大小)也更容易。