有个小问题想麻烦大家,帮看下..出来咋到,请多帮助还假设有数据表A
由:信息ID(PK) 信息本身这两个字段构成
另外有数据表B
由关键字ID(PK) 关键字本身(INDEX)真两个字段够成
另外有数据表C
由关键字ID(PK) 关键字本身(INDEX)真两个字段够成其中数据表B放着的是数据表A的一种类型的标签
数据表C放着的是数据表A的另外一种类型的标签现在我要根据数据表B及数据表C的关键字(各一个关键字)查找出来数据表A中的一条记录
(一条信息可以对应B表及C表中的多个关键字...一个B表或者C表中的关键字可以对应多条信息)
那么我现在选择的方案为
一:
建立数据关系表A_B
由字段 关系ID(PK) A表的信息ID(INDEX) B表的关键字ID(INDEX) 构成
建立数据关系表A_C
由字段 关系ID(PK) A表的信息ID(INDEX) C表的关键字ID(INDEX) 构成也就是说如果一条信息对应B表5个关键字,对应C表2个关键字
那么A_B中要有关于这条信息的5条记,A_C中要有关于这条信息的2条记录二:
修改表B,表C
分别增加一个字段,也就是A表ID的字段
这样有个不好的地方就是在B\C表本身形成了多对多的关系
也就是说如果一条信息对应B表5个关键字,对应C表2个关键字
那么B中要有关于这条信息的5条记,C中要有关于这条信息的2条记录
三:
采用方案一的改进方案
建立一个A_B_C数据关系表
由关系ID(PK) A表的信息ID(INDEX) C表的关键字ID B表的关键字ID 
(C和B为复合索引)
...同样
如果一条信息对应B表5个关键字,对应C表2个关键字
那么A_B_C中要有关于这条信息的10条记录也就是2X5然后,现在问题就来了,嘎嘎
问题一:我应当选择哪个方案比较好呢
问题二:选择任意或者新的方案后我做查询的时候用以下哪种方式好呢:
一.联表查询
二.子查询
三.一次只查询一个表,查询到最后形成信息ID的数组,最后用IN (1,2,3)这种方式从表A提取信息

解决方案 »

  1.   

    就是A表一条记录对应B表里的关键字5个,对应C表里的关键字2条
      

  2.   

    其实完全可以设计两个表:A表
        id    --pk
        nameB表
        type   --类型,用来区分原来的B表数据还是C表数据
        ID     --A表的ID
        ....
    不知道我是不是正确理解了你的意思
      

  3.   

    B表
        type   --类型,用来区分原来的B表数据还是C表数据
        ID     --B表的ID
      

  4.   

    其实问题就是当一个记录拥有两个类型的标签的时候,每次查找要两个标签做为搜索条件,这个时候表结构的设计问题...
    我又想出了一种方案,但是不知道是否成熟...
    我把信息表(原A表)拆分成24个表(A-Z,去掉UV)为表名(MESSAGE_A,MESSAGE_B,表名为关键字B表首汉字的字母缩写)
    关键字表为B C两个表
    表A结构变为
    AID MESSAGE KEY_B KEY_C
    做大量的冗余,每次查询的时候先根据两个关键字的首汉字缩写拼出表名,然后到对应表里查找记录,但是这样会导致表A变为多对多的表...而且冗余做的太大了甚至走极端的时候,我可以把数据表拆成24X24,MESSAGE_AB MESSAGE_AC........这样来做冗余,老兄以为如何?
      

  5.   

    关键字表为B、C两个表?不是太清楚你的意思你最好能把A、B、C表详细结构贴出来,并给些示例数据,这样好说明问题