建议联系人管理数据库设计

时间:2018-05-02 11:03:58

标签: mysql sql database innodb

我目前正在为商会设计联系人管理数据库。数据库的目标是存储所有(我们自己的员工除外),所有记录的公司(常规公司和会员),地址< / strong>员工目前负责的人员和公司任务,我们的员工列表(用户)和角色在会议厅内。

业务规则

  • 一个person适用于一个company
  • 一个company有多个person
  • personcompany可以有多个address
  • 一个company可以有多个industry
  • 一个industry可以有多个company
  • 一个company可以有多个membertype
  • 一个membertype可以有多个company
  • 一个user可以播放多个role
  • 可以将一个role分配给mutliple user
  • 一个user可以有多个task
  • 一个task可由多个user
  • 处理
  • 一个task可以定位多个person
  • 一个person可以由多个task
  • 定位
  • 一个person只能添加一个user
  • 一个user可以添加多个person
  • 一个company可以有0个或1个parent_company
  • 一个parent_company可以有多个子公司

我提出了以下设计,它经历了一些变化:

enter image description here

问题

  • 是否有更好的方式来展示user-task-person关系?
  • 例如,如果person只能有一个email但可以有多个tel,那么我应该为tel制作一个额外的表格email }仍然在person表中?是否会被认为是&#34;不清洁&#34;?
  • 对于表格membertypecompany_idtypename都应该是PK?
  • 这个架构现在看起来如何?还有一些正常化吗?

我是数据库中的新手,肯定存在一些设计缺陷或错误,如果你们能给我一些建议以便我能纠正和改进这个设计,那就太好了。谢谢^〜^

1 个答案:

答案 0 :(得分:1)

我看到的主要问题是,虽然所有主键都定义为Int,但是一些外键或引用被定义为varchar。

  1. 联系表中的公司
  2. 用户表中的user_role
  3. 公司的parent_company
  4. 在用户表格中添加了_
  5. 此外,role_id的长度为10,而所有其他主键为11 我个人更喜欢大写的表名,用户,公司等

    已修改版本的更新:

    您可能想要创建一个电话,邮件,传真等表格,例如contact_info,其中可能包含一个包含联系信息的字符串字段和一个类型字段(电子邮件,电话,传真......)。这样你可以存储几个电话号码,如果你想将电子邮件限制为一个,你可以把它留在person表中,不要在这里允许,或者有一个业务规则,只允许在{{ {1}}。

    如果您要将contact_info的电子邮件或电话号码(例如contact@somecompany.com)或号码存储到公司总机

    ,此表对company也很有用。
      

    对于表membertype,company_id和typename都应该是PK吗?

    第二次更新 关于地址解决方案: company表不应该包含足够的信息来使每个地址都是唯一的,我可以理解公司可以有多个地址但是它应该允许两家公司拥有相同的地址(我的意思是相同的)数据库中的行)所以也许它应该从address和'地址'改为一对多,而在另一个方向一对一改为。 我还认为在两个地址链接表中添加某种标签可能会很好,因此可以轻松识别“home”,“work”,“Office”,“Warehouse”等地址...