作者flakchen (flak)
看板Database
标题Re: [SQL ] 想找出大联盟会投相同球路的投手 ?
时间Sat Jun 14 22:32:54 2008
其实正规化是易於编辑(Insert/Update)不利於查询
反正规化则相反,是利於查询,不利於编辑
所以反/正规化是虚实相生,正反相克(我在说啥?)
端看你应用场合而已
用正规化的资料表可以透过子查询作反正规化的查询,
不过资料量大的话效率会很慢(子查询又加Union的关系)
Select 伸卡球,滑球,变速球........,Count(*)
From (select 投手,Max(伸卡球) as 伸卡球,Max(滑球) as 滑球........
from (select 投手,1 as 伸卡球,0 as 滑球,0 as 变速球...
from Table
where 球路='伸卡球'
union all
select 投手,0 as 伸卡球,1 as 滑球,0 as 变速球...
from Table
where 球路='滑球'
union all
select 投手,0 as 伸卡球,0 as 滑球,1 as 变速球...
from Table
where 球路='变速球'
.......)
group by 投手)
※ 引述《xam (听说)》之铭言:
: ※ 引述《flakchen (flak)》之铭言:
: : 改一下栏位比较简单
: : 投手 伸卡球 滑球 变速球 曲球
: : Wang 1 1 1 1
: : Nilson 1 1
: : Santana 1 1
: : Select 伸卡球,滑球,变速球,曲球,投手
: : order By 伸卡球,滑球,变速球,曲球
: : 就是答案1
: : Select 伸卡球,滑球,变速球,曲球,Count(*)
: : Group By 伸卡球,滑球,变速球,曲球
: : 就是答案2
: 原本的 schema 比较接近正规化
: 你这样反而违反正规化原则吧?
: 这样设计除了对现在这个问题刚好比较好解以外
: 似乎不太有利
: 不过如果如果情况不会变得太复杂,也是一个解法
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.120.12.248