【发布时间】:2014-02-18 19:59:36
【问题描述】:
这是我在这里的第一个问题,但我已经有一段时间了。
我想创建一个 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 片 mozzarella。
每个风味都由一个成分列表组成(例如:“意大利辣香肠:奶酪、意大利辣香肠、牛至、西红柿等”) .用户可以通过单独更改成分来更改比萨饼的风味(例如,将培根添加到意大利辣香肠风味中)或从头开始创建自己的风味。
比萨店已预先配置:
可用的 Crusts 表。
可用成分表。
可用布局表。
可用边的表。
可用风味表。
可用尺寸表。
我愿意创建一个更灵活的设计,最多可以添加 8 种不同的口味,但我对 Pizza table 的固定属性不满意。 我考虑过创建一个 PizzaLayoutItem,删除 4 个风味列。每个项目都有一个风味和切片数量。每个披萨都会有一个项目列表,所以我会创建一个表: PizzaLayoutItem: id, PizzaId, flavorId, slices,
因此,用户定义的火腿/培根披萨将具有: “4:4”布局。 2 个 LayoutItems,一个:火腿 4 片。还有一个:培根 4 片。
我的意思是,我必须创建所有这些表吗? 每次用户构建一个披萨,数据库会查询 6 或 7 个表? 我们可以认为表的大小是无关紧要的,因为披萨店里的面包皮、口味等的数量不会很大,所以它是一个快速查询,但是,还有更好的设计方法吗?
我不能发布图片,所以我不能发布我设计的方案=/。
如果这个问题的布局也没有优化,我很抱歉。
【问题讨论】:
-
查询6个或7个表有什么问题?
-
事实上,我认为这还不够,布局字符串是一种可怕的方法,而不仅仅是存储口味列表(还有一个额外的表格将披萨订单与口味联系起来)。您也根本没有存储订单(多个比萨饼等)
-
@MarkBaker 其实我没说错。我只是在询问有经验的用户这种设计是否还可以,或者有没有更好的设计。
-
@Blindy 是的,你是对的。字符串模式很糟糕,但口味列表让我感到困惑,因为在这种情况下,顺序很重要。用户可以用 4 片火腿、2 片奶酪和 2 片培根制作披萨。所以如果只是一个数组,那么我们怎么知道每种口味有多少片?这就是我想到 LayoutItems 的原因。
-
我看不出订单是从哪里来的,如果您从北点开始数,您得到的披萨与从东点开始数不同吗?如果它在运输过程中旋转怎么办?
标签: php mysql database codeigniter database-design