这是我的第一个问题,但我已经有一段时间了。
我想创建一个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个表? 我们可以认为表格大小是无关紧要的,因为披萨商店中的外壳,口味等数量不会很大,所以这是一个快速的查询,但是,还有更好的设计方法吗?
我无法发布图片,所以我无法发布我设计的方案= /。
如果这个问题的布局没有优化,我很抱歉。
答案 0 :(得分:0)
您可以为表格使用邻接列表模型。它很简单,但它也适用于复杂的数据库方案,如家谱。然后我会使用装饰器模式来实现大部分逻辑。