这是另一个回答的注释。我的大脑很疼,所以我尝试了先前发布的简明而完整的答案,它起作用了。但这仅仅是“授人以鱼”,所以我必须看看背后的东西。
以下是ChrisChen3121在2014年1月22日提出的解决方案,只更改了括号、注释和换行。大多数括号与其匹配垂直对齐。希望这能让事情变得更容易看到。在美学重写的代码之后,是为了可视化/概念化解决方案而产生的中间关系。
长话短说:
- 寻找目标披萨;
- 使用\cross,构建一个幻想超集列表,好像所有的比萨店都提供了这些披萨;
- 从中减去所有“实际上提供”的披萨,从而创建一个“缺失的”列表;
- 最后,从[新的]“现实”中减去“缺失”的……就是这样。
\project_{pizzeria}(Serves)// “Actual” list of what pizzerias serve. Results shown below.
\diff
\project_{pizzeria}
(// After the diff, this is a list of "What's Missing". Results shown below
(// Super-set of all pizzerias combined with all "over30pies". Results shown below
// NOTE: Some combos here do not match reality
\project_{pizzeria}(Serves)
\cross
(// "over30pies": Within these parentheses produces table shown below
//Next line is what I used, it’s effectively equivalent, yes.
//roject_{pizza} ( \select_{age > 30 } Person \join Eats)
\project_{pizza} (\project_{name}(\select_{age > 30 } (Person))\join Eats)
)
)
\diff
( // “Actual” list of what pizzerias serve. Results shown below.
\project_{pizzeria,pizza}(Serves)
)
)
//“over30pies”,目标馅饼(指被30岁及以上人群食用的馅饼)
cheese
supreme
// 所有比萨店和所有目标(“over30pies”)的超级集合
// 注意:某些组合不符合现实。
Chicago Pizza | cheese
Chicago Pizza | supreme
Dominos | cheese
Dominos | supreme
Little Caesars | cheese
Little Caesars | supreme
New York Pizza | cheese
New York Pizza | supreme
Pizza Hut | cheese
Pizza Hut | supreme
Straw Hat | cheese
Straw Hat | supreme
//实际上,哪些披萨店真正提供哪些口味的完整列表
Chicago Pizza | cheese
Chicago Pizza | supreme
Dominos | cheese
Dominos | mushroom
Little Caesars | cheese
Little Caesars | mushroom
Little Caesars | pepperoni
Little Caesars | sausage
New York Pizza | cheese
New York Pizza | pepperoni
New York Pizza | supreme
Pizza Hut | cheese
Pizza Hut | pepperoni
Pizza Hut | sausage
Pizza Hut | supreme
Straw Hat | cheese
Straw Hat | pepperoni
Straw Hat | sausage
//在想象中的“超级套餐”减去“实际”后的差异(剩余部分)。这代表了缺失的内容,也就是“这些比萨店没有提供所列出的必备比萨”。
Dominos | supreme
Little Caesars | supreme
Straw Hat | supreme