MariaDB社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5174|回复: 8
打印 上一主题 下一主题

关于一个设计上的问题(MYSQL)

[复制链接]
跳转到指定楼层
1#
发表于 2007-9-14 11:59:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有个小问题想麻烦大家,帮看下..出来咋到,请多帮助还
假设有数据表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提取信息
我上面说的子查询是指嵌套子查询,呵呵
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
2#
发表于 2007-9-14 14:14:35 | 只看该作者
有个图就好了,让偶想想...
3#
发表于 2007-11-4 10:39:22 | 只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|MariaDB社区 ( 京ICP备07012489号    |
业务联系: QQ:48474881; 邮箱: 48474881@qq.com; 电话:13911732319
声明:本站部分文章是网友转载,若未经作者同意或署名有误,请联系网站管理员。

GMT+8, 2024-9-20 00:36 , Processed in 0.094296 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表