方案一------------------------------------------------------
create table AAA
(
id varchar(8),
yuyan char(2),
en_content nvarchar(40),
cn_content nvarchar(40) 
primary key(id)
)
id   yuyan   en_content   cn_content
001    CN      CHINA         中国
002    EN       USA          美国create view v_aaa as
(
select id,
case when yuyan='EN' then en_content
when yuyan='CN' then cn_content end as mycontent 
from AAA where id=''
)方案二------------------------------------------------------
create table AAA
(
id varchar(8),
yuyan char(2),
mycontent nvarchar(40)
primary key(id,yuyan)
)
id   yuyan   mycontent
001    CN      中国         
001    EN      CHINA
002    CN      美国         
002    EN      USAcreate view v_aaa as
(
select id,mycontent
from AAA where id='' and yuyan=''
)
问上面方案一的视图运行速度快,表合理;
还是方案二的视图运行数的快,表合理。

解决方案 »

  1.   

    怕就是
    case when yuyan='EN' then en_content
    when yuyan='CN' then cn_content end as mycontent  这样的条件sql语言会不会影响到执行性能啊。可能我上面说的不是很明白,但是我的意思就是一个表存储了中文和英文字段,一个id的中文和英文的意思是一样的。就是中文网站我要视图显示中文记录,英文网站我要英文显示记录。就想知道视图的执行性能。
    方案一合理还是方案二合理?谢谢!
      

  2.   

    我觉得这个跟三范式不太一样吧?第一范式定义:如果关系R 中所有属性的值域都是单纯域,那么关系模式R是第一范式的那么符合第一模式的特点就有1)有主关键字2)主键不能为空,3)主键不能重复,4)字段不可以再分例如: StudyNo   |   Name   |   Sex   |   Contact20040901      john         Male      Email:[email protected],phone:22245620040901      mary         famale    email:[email protected] phone:123455以上的表就不符合,第一范式:主键重复(实际中数据库不允许重复的),而且Contact字段可以再分所以变更为正确的是 StudyNo   |   Name   |   Sex   |      Email         |      Phone20040901      john         Male       [email protected]       22245620040902     mary          famale      [email protected]      123455第二范式存在非主属性对码的传递性依赖 R(A,B,C) A是码 A -->B ,B-->C 定义:如果关系模式R是第一范式的,而且关系中每一个非主属性不部分依赖于主键,称R是第二范式的。所以第二范式的主要任务就是满足第一范式的前提下,消除部分函数依赖。StudyNo   |   Name   |   Sex   |         Email         |      Phone    |   ClassNo  | ClassAddress01                  john        Male       [email protected]     222456      200401            A楼201                   mary       famale    [email protected]       123455      200402            A楼3这个表完全满足于第一范式,主键由StudyNo和ClassNo组成,这样才能定位到指定行但是,ClassAddress部分依赖于关键字(ClassNo-〉ClassAddress),所以要变为两个表表一StudyNo   |   Name   |   Sex   |      Email         |      Phone |   ClassNo       01            john         Male       [email protected]  222456   200401            01           mary         famale    [email protected]    123455      200402     表二 ClassNo  | ClassAddress 200401      A楼2 200402      A楼3
    第三范式不存在非主属性对码的传递性依赖以及部分性依赖 ,
    StudyNo   |   Name   |   Sex   |      Email         |      bounsLevel   |   bouns20040901      john         Male       [email protected]   优秀                    $100020040902     mary         famale    [email protected]       良                         $600这个完全满足了第二范式,但是bounsLevel和bouns存在传递依赖更改为:StudyNo   |   Name   |   Sex   |      Email         |      bouunsNo20040901      john         Male       [email protected]   120040902     mary         famale    [email protected]       2bounsNo   |   bounsLevel   |   bouns1                   优秀                $1000 2                 良                   $600这里我比较喜欢用bounsNo作为主键,基于两个原因1)不要用字符作为主键。可能有人说:如果我的等级一开始就用数值就代替呢?2)但是如果等级名称更改了,不叫 1,2 ,3或优、良,这样就可以方便更改,所以我一般优先使用与业务无关的字段作为关键字。一般满足前三个范式就可以避免数据冗余。BCNF
    消除了任何属性对码的部分和传递函数依赖。
      

  3.   

    第一表的主键为:
    primary key(id)
    第二表的主键为:
    primary key(id,yuyan)你说的是哪一范式啊?