2014-01-27 74 views
1

这是我的第一个问题,但我已经有一段时间了。比萨数据库优化

我想创建一个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为培根,Flavor2为马苏里拉,所以它将有6片培根和2片马苏里拉奶酪。

每个风味是由一个成分列表(例如: “:干酪,意大利辣香肠,牛至,番茄等”)。用户可以通过单独更换配料(例如将培根加入辣香肠味)或者从头开始创建自己的味道来改变比萨风味。

的比萨饼店将有预配置:

可用结壳的表。
可用配料表。
可用布局表。
可用边缘的表格。
一个可用的香料表。
可用尺寸表。

我愿意创建一个更灵活的设计,我可以添加多达8种不同的口味,但是我对比萨表的固定属性不满意。 我想过创建一个PizzaLayoutItem,删除4个风格的列。并且每个项目都具有风味和片数。每个比萨饼将有项目的列表,所以我会创建一个表: PizzaLayoutItem:ID,pizzaId,flavorId,切片,

所以用户定义火腿/培根比萨将有: A “4:4”布局。 2 LayoutItems,一个:火腿4片。还有一个:培根4片。

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

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

+5

查询6个或7个表有什么问题? –

+1

事实上,我认为这还不够,布局字符串是一个可怕的方法,而不仅仅是存储一个口味列表(用额外的表将连接比萨饼订单的口味)。你也没有存储任何订单(多个比萨饼等) – Blindy

+0

@MarkBaker事实上,我没有说这是错的。我只是问有经验的用户,如果这种设计是好的或者会有更好的。 –

回答

0

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