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

33qvvth1  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(320)

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

业务规则

1 person 为一个人工作 company 1 company 有多个
person person 以及 company 可以有多个 address 1 company 可以是多个 industry 1 industry 可以有多个 company 1 company 可以有多个 membertype 1 membertype 可以有多个 company 1 user 可以播放多个 role 1 role 可以分配给mutliple user 1 user 可以有多个 task 1 task 可以由多个 user 1 task 可以针对多个 person 1 person 可被多个 task 1 person 只能添加一个 user 1 user 可以添加多个 person 1 company 可以有0或1 parent_company 1 parent_company 可以有多个子公司
我提出了以下设计,并进行了一些修改:

发行

有没有更好的方法来展示 user-task-person 关系?
例如,如果 person 只能有一个 email 但可以有多个 tel ,我应该为你多做一张table吗 telemail 仍在调查中 person table?会被认为是“不干净”吗?
为了那张table membertype ,应该 company_id 以及 typename 都是pk?
这个模式现在看起来怎么样?还有一些正常化的工作要做吗?
我是一个在数据库的新手,肯定有一些设计缺陷或错误,如果你们能给我一些建议,使我可以纠正和改进这个设计,这将是很好的。谢谢^~^

rsl1atfo

rsl1atfo1#

我看到的主要问题是,虽然所有主键都被定义为int,但一些外键或引用被定义为varchar。
联系人表中的公司
用户表中的用户角色
公司中的母公司
在用户表中添加
另外,角色id的长度为10,而所有其他主键的长度为11。
就我个人而言,我更喜欢大写的表名,用户,公司等
已编辑版本的更新:
您可能需要为电话、邮件、传真等创建一个表 contact_info 它可以包含一个保存联系人信息的字符串字段和一个类型字段(电子邮件、电话、传真等)。这样你可以存储几个电话号码,例如,如果你想限制电子邮件的数量,你可以把它留在 person 表,而不允许在此处使用它,或者有一个业务规则只允许在其中使用一个电子邮件行 contact_info .
这张table也可以用来 company 如果您想存储 company 就像contact@somecompany.com 或者公司总机的号码
对于表membertype,company\u id和typename是否都应该是pk?

地址解决方案的第二次更新:不应该 address 表包含足够的信息,使每个地址都是唯一的,我可以理解一个公司可以有多个地址,但它是否允许两个公司有相同的地址(我的意思是在数据库中的同一行),所以也许它应该改为一对多从 company 以及´地址´ 但在另一个方向是一对一。
我还认为,在两个地址链接表中添加某种标签也不错,这样人们就可以很容易地识别出“家”、“工作”、“办公室”、“仓库”等地址。。。

相关问题