我正在寻找一个优雅的方式,提供数据,与规则有关的内容。
让我们假设如下:我想计算顾客的折扣。我有客户类别,"HappyHours“和折扣。
我有9个不同的类别,每个类别有3种不同的快乐时间-时间.折扣取决于类别和时间的组合。这些值不会经常变化,所以我正在寻找一种“不变”的方法来解决这个问题。
示例:
等等..。
这是针对应用程序的,每次执行都需要折扣。所以很高兴能找到一种既干净又快捷的方法。
我想到了两种可能性:
你认为如何?有没有一种更有活力的方法?
发布于 2016-11-02 10:49:22
您可能应该有一个参考表,其列如下:
然后,您可以使用引用表查找这些值。类似于:
select t.*, r.premium
from t join
reference r
on t.category = r.category and t.happyhourtime = r.happyhourtime;这类似于你的第一选择。但是,我将有一个合成标识主键,并有另外两个列有一个唯一的约束。另外,您可能会考虑将其转换为一个缓慢变化的维度(有一个有效的结束日期),这样您就可以跟踪随时间变化的情况。
发布于 2016-11-02 10:53:37
从SQL server的角度来看,最简洁的做法是按照第一项建议(类别、时间、折扣)创建三列的表。然后,您可以为应用程序提供两个选项。如果它是一个.net应用程序,您可以使用您的类别和时间值作为变量进行简单的选择,以返回结果集。
或者,如果您想在应用程序中使用更少的SQL代码,可以像上面那样创建表,并从这样创建的标量值函数中进行选择:
CREATE FUNCTION [dbo].[fn_Discount] (@Category Varchar(50), @HappyHour TIME)
RETURNS DECIMAL(8,2)
AS
BEGIN
DECLARE @Discount DECIMAL(8,2) = (
SELECT
Discount
FROM dbo.HappyHourDiscount
WHERE Category <= @Category
AND HappyHour = @HappyHour
)
RETURN(@Discount)
END通过应用程序传递函数的参数。
https://stackoverflow.com/questions/40376552
复制相似问题