+ -
当前位置:首页 → 问答吧 → 同属性记录之间建立关系,关系两头彼此无主从之分,如何设计数据库?

同属性记录之间建立关系,关系两头彼此无主从之分,如何设计数据库?

时间:2011-12-03

来源:互联网

Title:同属性记录之间建立关系,关系两头彼此无主从之分,如何设计数据库?
举例:
(1)有一些记录类似如下效果
CustomerType CutomerName
银行 招商银行
银行 交通银行
保险 中国人寿
保险 中国平安
基金 南方基金
基金 易方达基金
券商 中信证券
券商 银河证券
…… ……
请注意:
  CustomerType字段在某些业务统计时会用到,同时为了便于理解,本例已经对业务描述进行了简化。(实际中,可能并不存在CustomerType这个字段,取而代之的可能是“业务范围”,例如券商可能拥有“证券交易”和“融资融券”两个业务,而银行可能拥有“三方存管”和“基金代销”两个业务。)
(2)如上这些客户可能存在如下关系:关系的双方并无主从之分,他们类似于一张白纸的两面!没有“正面”,也没有“反面”;或者说都是“正面”,也都是“反面”:
Seq SideA SideB
1 招商银行 中信证券
2 银河证券 招商银行
3 交通银行 南方基金
4 易方达基金 招商银行
5 中国人寿 交通银行
6 交通银行 招商银行
…… ……
请注意:
  以上关系仅是示例,都是楼主瞎掰的。该示例表明,(1)中的任何两个客户之间都可能存在联系,这个联系没有主次之分。
  但是,构成的联系中,双方客户却有CustomerType的属性。
(3)上面的(1)和(2)描述的都是业务关系,针对这样的业务关系,查询及报表的核心需求是:
a.查询关系数量:6个。
b.可查询某客户相关的所有关系数量,例如与招商银行相关的关系数量:4个,分别是记录1、2、4、6。
c.可查询某类客户相关的所有关系数量,例如与银行相关的关系数量:6个。
d.可查询特定两类客户之间的所有关系数量,例如银行与基金的关系数量:2个。或者银行与银行的关系数量:1个。
e.直接使用如上业务描述的来建立数据表,肯定也能实现abcd的需求,只是在编写sql时需要小心一些细节陷阱。楼主的问题是,是否还有其他更加简单的数据表设计方法(限制:所有Customer必须统一存放,不允许不同CustomerType的客户用不同表存放),简单到abcd对应的sql非常好写,能轻易避免陷阱,同时表结构易于理解?

作者: tabno   发布时间: 2011-12-03

貌似楼主说的,是多对多关系.一般说来,多对多关系可以拆分成两个一对多关系,关键是看它们是以什么为联系.如果从银行来说的话,可以用"业务"来联系.

作者: qianjin036a   发布时间: 2011-12-03

你查询的时候如下即可:
例如查询"招商银行"
select * from tb where col1 = '招商银行' or col2 = '招商银行'
例如查询"银行"
select * from tb where col1 like '%银行%' or col2 like '%银行%'

作者: dawugui   发布时间: 2011-12-03

热门下载

更多