CSDN没高手了吗?

a19895161989516 2013-08-27 08:56:50
20几楼了就没有一个发表看法的










我想说的是这样做起来,做查询就比较麻烦了
...全文
707 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
独孤龙城 2013-09-16
  • 打赏
  • 举报
回复
第几范式?请规范化
jshi123 2013-08-28
  • 打赏
  • 举报
回复
看情况吧,比如asp.net的profile表格,存放用户参数配置的,因为用户参数每个程序都不固定,所以也采用这种设计方式。 如果是基本固定的字段,就没有必要这样设计,可以用普通字段,结构复杂有层次的数据可以用xml字段,甚至不用关系数据库,用面向文档的数据库。
a19895161989516 2013-08-28
  • 打赏
  • 举报
回复
另外sql行转列我可以抽取出来做一个公共方法
a19895161989516 2013-08-28
  • 打赏
  • 举报
回复
引用 50 楼 jshi123 的回复:


非常感谢,耐心的回复。


我有个页面定制这些属性的,这些属性应该变化不大
https://img-bbs.csdn.net/upload/201308/27/1377564814_986376.jpg

我决定用这种方式了,我简单的测试一下,速度也是很快的




select * from
(
select
InformationId,
( select top 1 TemplateVal from T_informationVal where InformationId=tempinfoval.InformationId and TemplateId='6' ) as '6',
( select top 1 TemplateVal from T_informationVal where InformationId=tempinfoval.InformationId and TemplateId='7' ) as '7',
( select top 1 TemplateVal from T_informationVal where InformationId=tempinfoval.InformationId and TemplateId='8') as '8',
( select top 1 TemplateVal from T_informationVal where InformationId=tempinfoval.InformationId and TemplateId='71') as '71',
( select top 1 TemplateVal from T_informationVal where InformationId=tempinfoval.InformationId and TemplateId='41') as '41',
( select top 1 TemplateVal from T_informationVal where InformationId=tempinfoval.InformationId and TemplateId='66') as '66',
( select top 1 TemplateVal from T_informationVal where InformationId=tempinfoval.InformationId and TemplateId='75') as '75',
max( case TemplateId when '9' then TemplateValDecimal else 0 end ) as '9',
max( case TemplateId when '10' then TemplateValDecimal else 0 end ) as '10',
max( case TemplateId when '21' then TemplateValDecimal else 0 end ) as '21'
from T_informationVal as tempinfoval
group by InformationId
) as infoval
inner join T_information as info
on infoval.InformationId = info.InformationId
where info.ProductDesc2 = '二手车' and infoval.[6]='大众'
and infoval.[21]<10




jshi123 2013-08-28
  • 打赏
  • 举报
回复
引用 40 楼 a19895161989516 的回复:
[quote=引用 38 楼 jshi123 的回复:] 看情况吧,比如asp.net的profile表格,存放用户参数配置的,因为用户参数每个程序都不固定,所以也采用这种设计方式。 如果是基本固定的字段,就没有必要这样设计,可以用普通字段,结构复杂有层次的数据可以用xml字段,甚至不用关系数据库,用面向文档的数据库。
这个数据将非常多,不是配置的[/quote] 字段多也不一定就要设计成这样方式,字段多且稀疏(多数字段都是空数据)才比较合适用这种方式。 至于你说的查询问题,可以把上面那个sql查询的中间部分提取出来做成view,以后的查询操作都可以在这个view上面执行,具体可以搜索sql列转行,这方面资料很多的。 仅凭一两点信息很难判断设计是否合理,因为这可能跟你的项目对性能的要求、扩充灵活性要求、是否已有成型的orm架构、团队对其它nosql类型数据库的掌握程度,等等各个方面都要考虑的。 从你贴出来的图推测业务需求,我理解是发布各种类型的信息,每种信息都有各自的附加属性,不同种类信息的附加属性各不相同。 如果基于以上理解的话,另一种可能的设计方式是:每种类型一个表格。当然可以保留主从表设计,子表是存放各种信息类型的附加属性,主表用一个鉴别字段区分子表的类型。 这种方式的优点是比较简单直观,大多数orm都支持这种TPC映射方式;缺点是不够灵活,如果信息类型很多的话,表太多也不好。 另外我看到你有一个页面好像是用来定制这些附加属性的,如果这些数据经常变化的话,也可以考虑用xml字段,优点是非常简单,因为只有一张表,所有附加属性都在一个xml字段中,同时也非常灵活,xml字段的内容可以随心所欲变化;缺点是查询效率上不如普通字段,而且如果以前没用过的话,引入新的技术手段总会有些意料之外的东西,不过楼主可以去稍微研究下。
帅哥不解释 2013-08-28
  • 打赏
  • 举报
回复
引用 43 楼 pengqian098 的回复:
[quote=引用 42 楼 zsaaa 的回复:] [quote=引用 34 楼 pengqian098 的回复:] [quote=引用 33 楼 zsaaa 的回复:] 逻辑太复杂,懒得看。路过、
帅哥你好,我是来看笑话的。[/quote]小黑在东莞还是厦门啊[/quote] 厦门[/quote]到东莞了记得喊哥去玩。去涨涨姿势。
跳动de指尖 2013-08-28
  • 打赏
  • 举报
回复
引用 42 楼 zsaaa 的回复:
[quote=引用 34 楼 pengqian098 的回复:] [quote=引用 33 楼 zsaaa 的回复:] 逻辑太复杂,懒得看。路过、
帅哥你好,我是来看笑话的。[/quote]小黑在东莞还是厦门啊[/quote] 厦门
帅哥不解释 2013-08-28
  • 打赏
  • 举报
回复
引用 34 楼 pengqian098 的回复:
[quote=引用 33 楼 zsaaa 的回复:] 逻辑太复杂,懒得看。路过、
帅哥你好,我是来看笑话的。[/quote]小黑在东莞还是厦门啊
men52676521 2013-08-28
  • 打赏
  • 举报
回复
a19895161989516 2013-08-28
  • 打赏
  • 举报
回复
引用 38 楼 jshi123 的回复:
看情况吧,比如asp.net的profile表格,存放用户参数配置的,因为用户参数每个程序都不固定,所以也采用这种设计方式。 如果是基本固定的字段,就没有必要这样设计,可以用普通字段,结构复杂有层次的数据可以用xml字段,甚至不用关系数据库,用面向文档的数据库。
这个数据将非常多,不是配置的
huaneramn 2013-08-28
  • 打赏
  • 举报
回复
我是高手。。。。。。。。。。。。。
jshi123 2013-08-28
  • 打赏
  • 举报
回复
嗯,各方面考虑充分一些,比如要删除一些属性、添加一些属性的时候怎么处理,数据访问用ado.net还是orm,增删查改是否方便等等。数据结构以后再动起来是比较麻烦的。
  • 打赏
  • 举报
回复
a19895161989516 2013-08-27
  • 打赏
  • 举报
回复
引用 22 楼 pz25925 的回复:
[quote=引用 21 楼 a19895161989516 的回复:]
怎麼能把 a 寫到 price 字段裏面呢? 這個需要約束,或者程式中有這樣的判斷。[/quote] 你看上面表的设计,如果不是这样的 我就把字段类型设计成decimal了
pz25925 2013-08-27
  • 打赏
  • 举报
回复
引用 21 楼 a19895161989516 的回复:
怎麼能把 a 寫到 price 字段裏面呢? 這個需要約束,或者程式中有這樣的判斷。
a19895161989516 2013-08-27
  • 打赏
  • 举报
回复
引用 20 楼 pz25925 的回复:
[quote=引用 19 楼 a19895161989516 的回复:] [quote=引用 18 楼 mmm306306 的回复:] 数据类型影响到什么了呢? 没看懂。。
影响到了一些数值类型的查询比如说 价格[/quote] 把字段轉換一下不就可以查詢了。


create table testtable
(
price varchar(10)
)

insert into testtable values ('100')

select * from testtable where CONVERT(decimal,price) = 100

drop table testtable 
[/quote] 大师太片面了 create table testtable ( price varchar(10) ) insert into testtable values ('100') insert into testtable values ('a') select * from testtable where CONVERT(decimal,price) = 100 drop table testtable Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.
a19895161989516 2013-08-27
  • 打赏
  • 举报
回复
引用 36 楼 jshi123 的回复:
[quote=引用 32 楼 a19895161989516 的回复:] 查询 价格:8-10 颜色:red 品牌:大众 的车

select * from 
(select
	id, 
	max(case pkey when '价格' then valint else 0 end) as '价格',
	(select top 1 valstring from table2 where id=t.id and pkey='品牌') as '品牌',
	(select top 1 valstring from table2 where id=t.id and pkey='颜色') as '颜色'
from table2 t
group by id) as tt
where 价格 between 8 and 10 and 颜色='red' and 品牌='大众'
[/quote] 是这样的,谢谢啦! 这样表设计的合理吗?
pz25925 2013-08-27
  • 打赏
  • 举报
回复
引用 19 楼 a19895161989516 的回复:
[quote=引用 18 楼 mmm306306 的回复:] 数据类型影响到什么了呢? 没看懂。。
影响到了一些数值类型的查询比如说 价格[/quote] 把字段轉換一下不就可以查詢了。


create table testtable
(
price varchar(10)
)

insert into testtable values ('100')

select * from testtable where CONVERT(decimal,price) = 100

drop table testtable 
a19895161989516 2013-08-27
  • 打赏
  • 举报
回复
引用 18 楼 mmm306306 的回复:
数据类型影响到什么了呢? 没看懂。。
影响到了一些数值类型的查询比如说 价格
马老虎 2013-08-27
  • 打赏
  • 举报
回复
数据类型影响到什么了呢? 没看懂。。
加载更多回复(25)

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧