反映mysql数据库表中的装饰器模式

时间:2013-08-16 16:54:21

标签: java mysql design-patterns decorator

我正在使用mysql数据库和java。我对装饰器模式的理解是它允许非常灵活的运行时因为你可以根据需要分配尽可能多的装饰器,直到你获得所需对象的行为或表示。我之前已成功编写了几个装饰器,现在我想将装饰对象的状态存储到数据库(最好是mysql)中。例如:

假设我正在为一家咖啡店编写一个系统,我的代表饮料成本的模型使用了一个装饰器(即具体的对象是浓缩咖啡,它可以用牛奶,糖,奶油,糖浆和其他任何东西装饰这些天放入咖啡。)此外,假设我现在不能预测未来我的咖啡中可以有多少种不同的成分(也许有一天人们会想要咖啡中的果冻豆,但我还不知道)

现在我想记录每次有人购买饮料,并记录所使用的成分。设计数据库模式的最佳方法是什么,以便它可以处理出现的新成分。我目前有两个想法,这两个想法似乎都不是正确的方法:

1)将饮料编码为json字符串并将其转储到数据库中,假设我的数据访问对象可以处理解码。

2)尝试预测对饮料的所有可能的修改,并为每个饮料制作专栏,每当有人提出新的饮料添加时,我必须改变模式。

必须有比这两种方法更好的方法。

1 个答案:

答案 0 :(得分:0)

尝试使用3个表格,一个用于成分,一个用于订单,以及两者之间的查找表。每次创建订单时,您都会向订单添加一行,向orders_ingredients添加许多行

create table orders {
   order_id int AUTO_INCREMENT PRIMARY KEY, 
   order_name 
);

create table orders_ingredients {
   order_id references orders(order_id)
   ingredient_id references ingredients(ingredient_id)
);

create table ingredients {
   ingredient_id int AUTO_INCREMENT PRIMARY KEY, 
   ingredient_name varchar(255)
);