5

我有一个需要将某些项目分配给访客的场景。用于存储和评估规则表达式的数据库设计

GuestTable has columns like 
1. Guest ID 
2. GuestType 
3. Age 
4. Height 
5. Gender 

ItemTable has columns like 
1. ItemID 
2. Item Name 

每个项目是基于项目的可用性以及客人的属性,即年龄组或高度范围等

如卖给客人。 每周一和周二,男性水疗客人以及酒店客人的身高大于5英寸且小于5英尺5英寸的时候,酒店将于下午2点至6点和下午6点至8点提供一件物品。

由于过滤条件的数量很大,并且可由最终用户配置。系统应该具有足够的可扩展性以适应新的过滤标准,我应该如何管理这些规则。将这些规则作为表达式存储在数据库表中可以吗?如何为这种情况建模数据库表?

我应该考虑使用一些规则引擎吗?

+1

听起来您正在创建自己的表达式构建器,因此您需要向用户展示所有可能的列和运算符列表(+, - ,<等)。我怀疑你需要将它转换成有效的WHERE条件,将它作为文本存储,并使用动态SQL来生成结束查询。或者,您可以创建一个包含大量参数的SSRS报告以显示有效项目的报告。只有评论,因为我希望有人有更好的建议。 – 2013-05-05 20:34:52

+1

没有关于如何应用规则的设计,那么您如何获得关于如何存储规则的答案。特定于某个项目的规则是什么?真的,你有一件你不会在5'5以上卖给客人的东西?库存如何?不能出售你没有库存的物品。缺少这么多东西。 – Paparazzi 2013-05-05 20:36:22

+0

@Blam - 鞋跟高跟鞋堆放? – APC 2013-05-06 06:56:14

回答

1

由于APC在评论中写道,决定是否使用业务规则引擎并不是您应该信任的一群陌生人在互联网上。

但是......您的情况相对简单且受到限制。它似乎只是一个步骤,而不是一个工作流程 - “如果客户满足标准x,提供产品y”,而不是“所有客户匹配标准x必须得到经理批准”。它似乎仅限于数据库 - 不调用Web服务来决定产品是否合适。

在此基础上 - 不,不要选择规则引擎。他们是大型复杂的机器,只为自己付出比您所描述的更大的问题。

我建议使用.Net“查询示例”库来允许您的用户创建过滤条件;有几种商业选择,例如EasyQuery

+0

谢谢,“按实例查询”可以举几个例子吗? – 2013-07-18 17:22:28

+0

我发现只有一个 - 曾经有一个来自Telerik,Crystal也有,但找不到链接... – 2013-07-19 10:54:26

1

你应该考虑使用类似Flee的东西,并避免使用数据库作为规则引擎。客户端解析将会更快,并且不会给您的数据库服务器带来太多负载。只需读取值,然后使用Flee解析表达式。它是一个很棒的评估引擎。试着让我们知道你的想法。