MariaDB社区

标题: 关于一个设计上的问题(MYSQL) [打印本页]

作者: caramon    时间: 2007-9-14 11:59
标题: 关于一个设计上的问题(MYSQL)
有个小问题想麻烦大家,帮看下..出来咋到,请多帮助还
假设有数据表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提取信息
我上面说的子查询是指嵌套子查询,呵呵
作者: kider    时间: 2007-9-14 14:14
有个图就好了,让偶想想...
作者: kider    时间: 2007-11-4 10:39
对不住,忙给忘了^_^
http://topic.csdn.net/u/20070914 ... 9-d2cea0a58bde.html




欢迎光临 MariaDB社区 (http://123.56.88.72/) Powered by Discuz! X3.2