同属性记录之间建立关系,关系两头彼此无主从之分,如何设计数据库?
时间: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非常好写,能轻易避免陷阱,同时表结构易于理解?
举例:
(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 '%银行%'
例如查询"招商银行"
select * from tb where col1 = '招商银行' or col2 = '招商银行'
例如查询"银行"
select * from tb where col1 like '%银行%' or col2 like '%银行%'
作者: dawugui 发布时间: 2011-12-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28