1

我需要创建数据库表来存储备忘录。在“收件人”条款中,用户可以选择单个员工或一组员工(不同的组已经可以在与员工有多对多关系的数据库中使用)。我想知道什么应该是表结构。 对于没有群组的简单备忘录,我将使用带有EmployeeID作为外键的memodetail的“MemoMasters”和“Memodetails”。我怎么能在这个结构中嵌入组关系数据库设计 - 关系问题

关注

+0

我需要存储每个员工的确认信息也 – Tassadaque 2010-06-28 10:28:36

回答

1

只要您将其作为关系建模任务来处理,我就不会看到复杂性。假设你想要一个纯粹的关系解决方案,试试这个Memo Data Model。如果您不熟悉关系数据库建模标准,IDEF1X Notation可能会有所帮助。

  1. 它使用普通的超类型 - 子类型结构。

    • 在这种情况下,它是独占:所述MemoAddress即和EmployeeAddress 一个GroupAddress。

    • 独占子类型需要超类别中的判别器:我使用了布尔型IsEmployee,CHAR代码或类似的也很常见。

  2. 这是纯5NF;没有更新异常;完整的陈述式参照完整性。 Ack是在正确的位置(我使用了DateTime,但布尔也很好)。

  3. 但是,如果您不习惯使用投影来填充Supertype-Subtype结构,它可能看起来很难看;只是问你是否需要帮助。

  4. 不要把“简单的备忘录与一个员工”不同,你会遇到的问题,重复码等

  5. 另外一个问题是,你可能需要EmployeeEmployeeIdMemo,这是一个不同的事情,因此你需要在MemoEmployee FK。

+0

中,这给了我一种查看问题的方法。虽然我实现了一个非常规的解决方案:(但我一定会再次考虑它。我有另一个与数据库相关的问题,请你在这里详细说明一下http:// stackoverflow。com/questions/4409003 /存储每周目标在数据库中 – Tassadaque 2010-12-13 05:09:39

+0

@Tassadaque。谢谢。完成。请投票。 – PerformanceDBA 2010-12-13 09:16:20

0

在这个结构中你不能。

这是一个many to many的关系,模型如此。

EDIT(审查的情况): 上述规定是不够的,确定了“精确解”

在过于简化的风险,你应该:

1)检查,如果你能坚持新的信息到任何现有的表/实体
2)如果不是,则检查是否添加属性/列到任何现有的表/ entties
3)如果不是,则添加新的表

的癸永远不会明确切断你的想法,你应该考虑几种情况及其后果。您还应该定期检查模型,以便寻找机会进行标准化,因为它会极大地影响系统的整体功能。

因此,例如,当您声明您已经拥有多组表的许多表时,现在的主要问题是天气重用该表或创建一个新表。

这取决于此表中的其他属性。也许对于你的商业模式/用例来说它是有道理的,也许它没有。

也许你需要建模一个名为“MemoRecipients”的表,它将存储收件人的信息(传递,确认等等)。那么你应该问自己,你是否需要所有这些状态的时间等等...

只有你可以确定什么是适合你的问题空间的设计决策。

+0

我知道它是多对多的关系,但请阅读它是有点复杂 – Tassadaque 2010-06-28 10:33:30

+0

@Tassadaque,审查和更新的情况。不幸的是答案只能以建议和建议的形式出现。 – Unreason 2010-06-28 12:48:50

0

看起来好像你需要继承heirarchy来实现你所描述的。考虑下面的图:

Database Inheritance.

在此图中创建一个父表(我称之为海报)和雇员和组表是儿童。您必须为员工表和组表创建相同的主键,也就是说,从组到组和海报以及员工之间有一对一的链接。

这样,备忘录的poster_id字段指向超类。您可以在海报,小组和员工之间进行连接,以确定您是否指向员工或小组。

我从图表中删除了员工和组之间的关系,就像您说的那样。

请注意,这只是可能的解释,您的解决方案可能会有所不同。

+0

感谢您的回复,但这种方法似乎存在一个问题。如果集团和员工的deos没有直接的关系,但员工和集团之间有多对多的关系,那么你提出的方法工作得很好。正如我前面提到的,我需要为每个员工存储确认信息,不管他是否属于组。如何在上述情况下处理该问题。如果我错了,请纠正我的错误 – Tassadaque 2010-06-29 06:19:17

+0

由于员工和组之间的关系是多对多的关系,因此您将创建一个关系来表示此关系。我们称之为employee_group。这将照顾你的许多人。这仍然适用于上述设计。你能再解释一下吗? – 2010-06-29 15:20:45

+0

Ack表示每个属于或不属于群组的雇员都必须承认他已收到备忘录。它是一个布尔型字段。这个字段是备忘录的一部分,与提案中的海报相关。所以ack将被储存在上图 – Tassadaque 2010-06-30 15:53:40