电子商务的交易记录,数据库怎么设计

电子商务的交易记录,数据库怎么设计,第1张

首先来说对于这种场景有两种设计方法,这两种方法都能够满足扩展性要求

1 把原有的横表转化为纵表存储属性,即

产品表:(product_id, product_name, product_class)

产品属性表:(product_id, property_id , property_name , property_value)

2 保持原有横表设计思路,但是d性字段含义单独元数据表存储

产品表:(product_id, product_name, product_class, prop1, prop2, propn)

产品属性含义元数据表

(product_class , prop1_name ,prop2_name, propn_name)

对于两种设计方法,个人理解为

a 对于首页打开就必须要能够快速查询出来的属性,而且这些属性本身各类产品差异不大。而对于差异大的属性基本都是针对特定一个产品查询。可以采用方案1来做。

b 首页显示产品列表时候就存在要显示出不同产品属性情况,采用方案2来做。当我们处理的是一个product list的时候,由于存在数据表本身的关联场景,用方案1会比麻烦,也影响性能。

create TABLE Table1 (Name varchar(50),Subject varchar(50))

INSERT INTO TABLE1 VALUES('A','a1')

INSERT INTO TABLE1 VALUES('A','a2')

INSERT INTO TABLE1 VALUES('A','a3')

INSERT INTO TABLE1 VALUES('A','a4')

INSERT INTO TABLE1 VALUES('A','a5')

INSERT INTO TABLE1 VALUES('A','a6')

INSERT INTO TABLE1 VALUES('A','a7')

INSERT INTO TABLE1 VALUES('B','b1')

INSERT INTO TABLE1 VALUES('B','b2')

INSERT INTO TABLE1 VALUES('B','b3')

INSERT INTO TABLE1 VALUES('B','b4')

INSERT INTO TABLE1 VALUES('B','b5')

INSERT INTO TABLE1 VALUES('B','b11')

INSERT INTO TABLE1 VALUES('B','b23')

INSERT INTO TABLE1 VALUES('B','b34')

INSERT INTO TABLE1 VALUES('B','b8')

INSERT INTO TABLE1 VALUES('B','b9')

INSERT INTO TABLE1 VALUES('B','b15')

就生成了表单TABLE1,如果把公司名称A,B横向输出,Subject的话,比较简单的是把Subject显示在1列,里面元素用","隔开,如果分列显示,就要找到Subject最长的列,否则影响效率;

因为不知道你的参数最多是多少,所以就在1列中显示

可以写一个函数F_str

create function F_str(@name varchar)

returns nvarchar(100)

as

begin

declare @S nvarchar(100)

select @S=isnull(@S+',','')+Subject from table1 where Name=@name

return @S

end

生成函数后在调用即可:

select distinct Name,Subject=dboF_str(Name) from Table1

自己用的话注意每次实验删除函数,不然创建2次重名的函数是不可以的

因为我的Name是动态读取的,不管多少公司,都是没问题的,唯一的不同就是

产品显示出来是在一列当中,而不是分列显示,不知道满足你的需求吗

Name Subject

A a1,a2,a3

B b1,b2,b3

C c1,c2,c3

这种格式的,Subject是不分列的,在一列

要是需要分列的话,实现比较麻烦,需要的话,和我说

declare @c int,@sql varchar(5000)

set @c=(select max(a) from (select count()a from table1 group by name)b)

declare @i int

set @i=1

select x=@c,y='列'+cast(@c as varchar) into #temp

while @i<@c

begin

insert into #temp values(@i,'列'+cast(@i as varchar))

set @i=@i+1

end

select y,name,subject into #temp2 from #temp t left join (select ROW_NUMBER() over(PARTITION BY name order by name) as id,name,subject from table1 ) tb on tbid=tx

set @sql = 'select name'

select @sql = @sql + ' , max(case y when ''' + y + ''' then subject else null end )[' + y + ']'

from (select distinct y from #temp2 ) as a

set @sql = @sql + ' from #temp2 group by name'

exec(@sql)

drop table #temp

drop table #temp2

SQL2005可以用,2000估计不能用,2000函数不全

纵向扩展指的是增加单个数据库服务器的性能,这包括增加内存、磁盘空间、CPU 等资源。这种扩展方式会遇到瓶颈,是因为单台数据库服务器的性能有限,总有一天会达到极限。

横向扩展指的是增加多台数据库服务器,将数据分布在多台服务器上。这种扩展方式需要解决如何在多台服务器之间进行数据同步、如何确保数据的一致性、如何处理负载均衡等问题。横向扩展能够提高数据库的性能和可扩展性,但也带来了更多的复杂性。

以上就是关于电子商务的交易记录,数据库怎么设计全部的内容,包括:电子商务的交易记录,数据库怎么设计、SQL SERVER中纵向的数据横向显示出来、请分析对于关系型数据库来说,为什么纵向扩展会遇到瓶颈横向扩展需要解决何种问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10189066.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存