在SQL数据库上保存过滤条件

时间:2017-04-21 13:34:33

标签: sql sql-server database-design

我有一个Products表如下:

create table dbo.Product ( 
  Id int not null
  Name nvarchar (80) not null,
  Price decimal not null
)

我正在创建Baskets(产品列表),如下所示:

create table dbo.Baskets ( 
  Id int not null
  Name nvarchar (80) not null
)

create table dbo.BasketProducts ( 
  BasketId int not null,
  ProductId int not null,
)

使用参数

基于搜索条件创建一个购物篮
  1. MinimumPrice;
  2. MaximumPrice;
  3. 类别(可以是零到多个);
  4. MinimumWarrantyPeriod
  5. 我需要保存这些参数,以便我知道如何创建这个篮子。

    将来我会有更多参数,所以我看到两个选项:

    1. 将MinimumPrice,MaximumPrice和MinimumWarrantyPeriod添加为Basket表的列,并添加BasketCategories和Categories表以将Basket与Categories相关联。

    2. 使用参数表创建更灵活的设计:

      创建表dbo.BasketParameters(   BasketId int not null,   ParameterTypeId int不为null,   值nvarchar(400)不为null )

      创建表dbo.ParameterType(   Id int not null   名称nvarchar(80)不为空 )

    3. 参数类型为MinimumPrice,MaximumPrice,Categories,MinimumWarrantyPeriod等。

      因此,对于每个篮子,我都有一个篮子参数列表,它们各有不同,每个都有价值。稍后,如果我需要参数类型,我将它们添加到ParameterType表...

      应用程序将负责使用每个Basket参数构建Basket ...例如,我将有一个Categories表,但将与BasketParameters分离。

      这有意义吗?你会用哪种方法?

1 个答案:

答案 0 :(得分:0)

您的第一个选项是优越的(特别是因为您使用的是关系数据存储。即SQL Server),因为它是正确引用的。这将更容易维护和查询,并且性能更高。

您的第二个解决方案相当于EVA表:https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model

这通常是一个糟糕的想法(如果您需要这种灵活性,您应该使用文档数据库或其他NoSQL解决方案)。唯一的好处是,您需要定期添加/删除属性或基于其他标准。