如何设计雇员也是客户的erd?

xmjla07d  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(332)

关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。

两年前关门了。
改进这个问题
我有一个电影院的场景,在这个场景中,员工也可以是客户(因为他们可以买票)。
我创造了两个实体,  customer  和  employee . 如果我能  emp_id  属于  employee  中的外键  customer 这样一来,员工也就成了客户:
客户:客户id、姓名、年龄、员工id
员工:员工id、姓名、年龄
但当我这么做的时候 employee 重复出现在 customer . 我该怎么办??

nhn9ugyo

nhn9ugyo1#

我看你table的第一件事,你不应该真的把东西藏起来 age . 存储生日或出生年份,这样您就不必每年更新它,因为年龄是相对于当前年份的。
请继续阅读,或跳到tl;如果你想听听我的意见的话。
对于你所面临的问题,可以有多种设计选择,我发现它主要基于哪一种选择。
一种选择是创建一个表来存储和人员相关的数据,并在该表中包含人员的类型,这样您就可以拥有客户或员工。这样,您的员工也可以被视为客户,但您知道这是一个特殊的客户。这样,当员工不再是员工时,您可以将其记录转换为客户。
另一种方法是将它们视为您已经拥有的数据,并处理您正在重复数据的事实。除非你有大量的员工(这不应该是电影院的情况),这也是一个有效的方法,因为很明显他们可以是客户,但我假设你想打折他们或出于某种原因区分这两种类型的客户。
想保持目前的状态,但不想重复数据以免出错?更改两个表共享的列并使其可为null。使用触发器或其他一些规则机制来检查 emp_id 填充,然后保留所有其他公共列值 null . 通过这种方式,您将需要注意从附加表中提取数据,因此 LEFT JOIN 这里需要提取客户的数据,这些客户也是员工。
还有更多的选择。。。
热释光;博士
如果你问我,我很可能会选择第一种方法,将人员相关数据存储在一个表中,或者创建一种人员类型,或者为员工和客户创建不同的表,这些表与人员表的关系为1:1。
也就是说,它可能看起来像:
人员(人员id、姓名、出生年份)
员工(person_id,…)(此处仅存储员工相关数据)
客户(person_id,…)(此处仅存储与客户相关的数据)
顺便说一句,弄清楚你想怎样在总体上区分人们可能是个好主意。您还没有给出整个系统的范围,因此很难给出一些建议。

dkqlctbz

dkqlctbz2#

如果只有customer和employee两个角色,则可以使用一个表来存储用户,如下所示:

person(id, name, birth, is_customer, is_employee, ...)

但如果将来考虑更多扩展,可以添加角色表,如下所示:

role(id, name, ...)
person(id, name, birth, roles, ...)

roles 可以存储json数据,如 [1,2] 或者像绳子一样 1,2 ,这取决于你喜欢什么和mysql版本。

相关问题