tSQL设计-创建具有不同属性的同一工作人员的多个实例的结果



我需要为员工存储信息。每个数据库实例都是每个母公司的,下面有多个出口。在一家门店工作的一些员工也可能在其他门店工作,但由于每个门店在很大程度上都是自主的,每个门店都不希望其他门店看到他们的员工名单。

我想创建独特的员工实例,并将其与雇佣他们的门店联系起来,使他们的详细信息在数据库中保持一致。然而,我的同事希望允许每个门店都有自己的员工。这种方法的结果是,John Smith可能是a网点的工作人员,Jonathan Smith可能是B网点的员工,J Smith可能是C网点的员工(因为每个网点几乎可以随心所欲地进入)。此外,每个工作人员都有一套与他们相关的技能和服务,这些技能和服务在各个门店之间也不会统一。

这种方法会不会导致后续问题?在门店层面,这可能不会有任何区别,但我担心,如果家长团体要求报告,结果可能会产生误导,因为可能会有5名员工被退回,而实际上他们是同一个人,但可能有不同的细节。

如果我理解正确的话,您所描述的是在对每个网点的人员记录进行非规范化(为每个网点提供一份完全独立的John Smith副本)与定义一个John Smith,然后定义可能属于网点访问级别的相关表之间进行选择。

如果您有选择(可以自由地以任何一种方式设计系统),则只有1张John Smith+辅助表的标准化方式是正确的方式,必要时提供特定于门店的详细信息。我不太愿意说"正确",但在没有大量用户的情况下,我认为这里的非规范化只会导致可避免的完整性错误。

如果你现在选择去规范化,不把A网点的约翰·史密斯和B网点的约翰·Smith联系起来,即使他们实际上是同一个人,你都在为不合逻辑的数据打开大门(更新到一个约翰,而不是两个),并失去了做简单事情的能力,比如计算数据库中不同的人数。

如果现在不能识别出独特的人,你将来就无法正确地将其他实体与一个人联系起来。这至少会使您的查询复杂化,并且在许多情况下会产生逻辑上不正确但技术上正确的信息。

除了有用的答案(实际上可以回答问题)之外,还有一些有用的信息:

如果这些人是工作人员(即他们有工作),那么为什么不使用他们的社会保障号码/国家保险号码作为唯一标识符呢?这肯定是独一无二的,他们每个人都有一个。

编辑:美国社会保障号码保证是唯一的,不会重复使用。请参见此处的Q20:http://www.ssa.gov/history/hfaq.html

编辑:不,他们不是!哦!感谢Mitch Wheat的链接:http://www.dailyfinance.com/2010/08/12/your-social-security-number-may-not-be-unique-to-you/我想这是一项不可能完成的任务,因为没有真正的方法来解决这个问题。。。

如果网点不知道其他网点的员工名单,并且网点可以添加员工,那么似乎没有任何方法可以阻止两个不同的网点添加同一个人,但它们在您的系统中被记录为不同的人。因此,除非有一些中央票据交换所,或者一个网点可以查看一个人是否已经被列为工作人员(没有得到她所关联的网点的任何详细信息),否则我认为你会陷入困境。

相关内容

最新更新