Pizza数据库优化

时间:2014-01-27 19:37:44

标签: php mysql database codeigniter database-design

这是我的第一个问题,但我已经有一段时间了。

我想创建一个OO / MVC Web应用程序(php,mysql,codeigniter中的披萨店),其中披萨对象是完全可定制的。 每一块披萨都被设计成可变的,我不确定数据方案是否已经优化,所以我要求提供一些建议。

每个披萨由以下内容组成:
地壳物体:它可以是薄的,厚的,平底的,有颗粒的等 边缘对象:可以是薄,厚,填充(可以填充一种成分)等。
PizzaSize对象:小,中,大等。
PizzaLayout对象:1种口味,2种口味(半份),2种口味(2 / 3-1 / 3)等。
观察字符串:任何用户额外选项,如“生肉”,“烤洋葱”等 1至4种口味:风味1,风味2,风味3和风味4.(只有风味1不可为空)

PizzaLayout 对象使用定义披萨分区的属性,例如:
“1” =只有一种风味
“4:4” = 2种口味,每片4片 “3:3:3” = 3种口味,每种3片(这是8件唯一的例外)
“6:2” = 2种口味,一种有6片,另一种有2种。

例如,如果比萨饼的布局为6:2,而Flavor1为Bacon,Flavor2为Mozzarella,那么它将有6片培根和2片莫扎里拉奶酪。

每个风味成分列表组成(例如:“意大利辣香肠:奶酪,意大利辣香肠,牛至,西红柿等”) 。用户可以通过单独改变配料来改变比萨饼风味(例如将培根加入意大利辣香肠味道)或从头开始创造自己的风味。

比萨店将预先配​​置:

可用的外壳表 可用成分表。
可用布局表。
可用边缘表。
可用口味表。
可用尺寸表。

我愿意创建一个更灵活的设计,我可以添加多达8种不同的口味,但我对Pizza table的固定属性不满意。 我考虑创建一个PizzaLayoutItem,删除4种风格的列。每个项目都有一个风味和数量的切片。每个披萨都有一个Items列表,所以我会创建一个表: PizzaLayoutItem:id,pizzaId,flavorId,slices,

因此,用户定义的Ham / Bacon Pizza将具有: “4:4”布局。 2 LayoutItems,one:Ham 4个切片。一个:培根4片。

我的观点是,我是否必须创建所有这些表格? 每次用户构建披萨时,数据库都会查询6或7个表? 我们可以认为表格大小是无关紧要的,因为披萨商店中的外壳,口味等数量不会很大,所以这是一个快速的查询,但是,还有更好的设计方法吗?

我无法发布图片,所以我无法发布我设计的方案= /。
如果这个问题的布局没有优化,我很抱歉。

1 个答案:

答案 0 :(得分:0)

您可以为表格使用邻接列表模型。它很简单,但它也适用于复杂的数据库方案,如家谱。然后我会使用装饰器模式来实现大部分逻辑。