Ste*_*ynn 5 mysql database database-design
我们公司有许多不同的实体,但这些数据库实体中有很大一部分是人.因此,我们有客户,员工,潜在客户,承包商和提供商,所有这些都有一些共同的属性,即姓名和联系电话号码.
我可能已经过度使用面向对象的思维,但现在我正在寻找一个包含所有人的"人员"表,标志/子表"扩展"该模型,并根据需要将基于角色的属性添加到联结表.如果我们说有250,000人(在MySQL和ISAM上)会对性能产生如此大的影响,以至于未来的DBA会永远诅咒我吗?我们最常见的搜索是姓名/姓氏组合.
例如,像Salesforce这样的公司,客户/潜在客户/员工都在具有子视图的集中表中(因为缺少更好的术语),或者它们被分成不同的表?
警告:这个问题与"我们发现在现实世界中做得更好"有关,而不是理论设计.我喜欢上述解决方案,并且相信通过视图,正确的大小和准确的索引,性能不会受到影响.我也觉得上面不算是一个MUCK,只是一张相当大的桌子.
一张“人”表是最灵活、最高效且无故障的方法。
您可以轻松进行有限的搜索 - 例如,找到所有具有此姓氏的人以及客户。但您可能还会发现,当您不知道某人是谁时,您必须查找他们 - 当您有一张“人”表时,这将是最简单的。
然而,你必须考虑一个人对你来说有多重意义的可能性——一个客户,因为他买了东西;一个承包商,因为你雇用他们来做一份工作。因此,最好有一个“连接”表来提供多对多关系。
create person_type (
person_id int unsigned,
person_type_id int unsigned,
date_started datetime,
date_ended datetime,
[ ... ]
)
Run Code Online (Sandbox Code Playgroud)
(当然,您需要添加索引和外键。person_id 是“person”表的 FK;“person_type_id”是所有可能的人员类型的参考表的 FK。我添加了两个日期字段,因此您可以可以确定某人对你来说是什么。)
| 归档时间: |
|
| 查看次数: |
1400 次 |
| 最近记录: |