我有一个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,
)
使用参数
基于搜索条件创建一个购物篮我需要保存这些参数,以便我知道如何创建这个篮子。
将来我会有更多参数,所以我看到两个选项:
将MinimumPrice,MaximumPrice和MinimumWarrantyPeriod添加为Basket表的列,并添加BasketCategories和Categories表以将Basket与Categories相关联。
使用参数表创建更灵活的设计:
创建表dbo.BasketParameters( BasketId int not null, ParameterTypeId int不为null, 值nvarchar(400)不为null )
创建表dbo.ParameterType( Id int not null 名称nvarchar(80)不为空 )
参数类型为MinimumPrice,MaximumPrice,Categories,MinimumWarrantyPeriod等。
因此,对于每个篮子,我都有一个篮子参数列表,它们各有不同,每个都有价值。稍后,如果我需要参数类型,我将它们添加到ParameterType表...
应用程序将负责使用每个Basket参数构建Basket ...例如,我将有一个Categories表,但将与BasketParameters分离。
这有意义吗?你会用哪种方法?
答案 0 :(得分:0)
您的第一个选项是优越的(特别是因为您使用的是关系数据存储。即SQL Server),因为它是正确引用的。这将更容易维护和查询,并且性能更高。
您的第二个解决方案相当于EVA表:https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model
这通常是一个糟糕的想法(如果您需要这种灵活性,您应该使用文档数据库或其他NoSQL解决方案)。唯一的好处是,您需要定期添加/删除属性或基于其他标准。