想在sql中发以下数据
一组string,叫key吧,需要一个个遍历
另外一组string,叫value吧,也需要一个个遍历
key和value是多对多映射关系,一个key可能有多个value,一个value也可能有多个key现在的要求是,1)上面说的遍历
2)从一个key得到对应的value要快,从一个value,得到有多少个key对应着它,也要快是不是很简单?
怎样设计了?这样查询比较快?我是个sql盲,希望说的详细的,加分好说。

解决方案 »

  1.   

    create table t (
      key  varchar(30),
      value varchar(30),
      constraint pk_t primary key (key,value)
    )然后分别对KEy vALuE建索引
      

  2.   

    这是一个很典型的多对多的关系,如果按1-3楼的说法,则会出现N多诸如更新、删除异常,效率低下等问题,并且根据楼主的要求更应该建立一张中间表,也就是用三张表来存储,一张存key,一张存vale,一张存key->value对应
    然后再对表key的key字段建索引,表value的value字段建索引,key_value表中的key_id,value_id做为主键要求1时用基本表,2时用派生表
      

  3.   

    我对楼主第一句不理解,啥叫“想在sql中发以下数据 ”?如果是存储,五楼说的对。如果是读出来在内存中处理,那用STL的multimap就可以了。那也是一个多重映射的容器。
      

  4.   


    create table bo_operastar (
      id int not null primary key,
      otherAttribs text
    );
    create table bo_fans (
      id int not null primary key,
      otherAttribs text
    );
    create table rl_operastar_fans (
      oid int not null,
      fid int not null,
      pri key pk_osfans (oid, fid)
    );
      

  5.   

    -- for getOperastarFans(oid):
    select fid as id from rl_operastar_fans where oid=@oid-- for getFanOperastars(fid):
    select oid as id from rl_operastar_fans where fid=@fid
      

  6.   

    数据库的理论很重要的。
    这个问题是多对多的数据模型,用三范式设计,你可以为KEY建立一张表,为VALUE建立一张表,为他们的关系建一张表。
    kEY表建索与主键,VALUE表建索引与主键,关系表存对应关系。
    比如:KEY表如下
          id     keyid    keyname
          1      a       aname
          2      b       bname
          3      c       cname
          VALUE表如下
          id      valueid   valuename
          1       a1        a1nme
          2       a2        a2name
          3       a3        a3name
      那么关系表如下
          id      key    value
          1      a       a1
          2      a       a2
          3      b       a1
          4      b       a3
          5      c       a1
    其中,keyid建立索引,valueid建立索引。且各自是主键。当然,前面的id并不是主键,只是易个序号,不是自增的主键啊。