我需要创建数据库表来存储备忘录。在“收件人”条款中,用户可以选择单个员工或一组员工(不同的组已经可以在与员工有多对多关系的数据库中使用)。我想知道什么应该是表结构。 对于没有群组的简单备忘录,我将使用带有EmployeeID作为外键的memodetail的“MemoMasters”和“Memodetails”。我怎么能在这个结构中嵌入组关系数据库设计 - 关系问题
关注
我需要创建数据库表来存储备忘录。在“收件人”条款中,用户可以选择单个员工或一组员工(不同的组已经可以在与员工有多对多关系的数据库中使用)。我想知道什么应该是表结构。 对于没有群组的简单备忘录,我将使用带有EmployeeID作为外键的memodetail的“MemoMasters”和“Memodetails”。我怎么能在这个结构中嵌入组关系数据库设计 - 关系问题
关注
只要您将其作为关系建模任务来处理,我就不会看到复杂性。假设你想要一个纯粹的关系解决方案,试试这个Memo Data Model。如果您不熟悉关系数据库建模标准,IDEF1X Notation可能会有所帮助。
它使用普通的超类型 - 子类型结构。
在这种情况下,它是独占:所述MemoAddress即任和EmployeeAddress 或一个GroupAddress。
独占子类型需要超类别中的判别器:我使用了布尔型IsEmployee
,CHAR代码或类似的也很常见。
这是纯5NF;没有更新异常;完整的陈述式参照完整性。 Ack是在正确的位置(我使用了DateTime,但布尔也很好)。
但是,如果您不习惯使用投影来填充Supertype-Subtype结构,它可能看起来很难看;只是问你是否需要帮助。
不要把“简单的备忘录与一个员工”不同,你会遇到的问题,重复码等
另外一个问题是,你可能需要Employee
谁写的EmployeeId
Memo
,这是一个不同的事情,因此你需要在Memo
的Employee
FK。
中,这给了我一种查看问题的方法。虽然我实现了一个非常规的解决方案:(但我一定会再次考虑它。我有另一个与数据库相关的问题,请你在这里详细说明一下http:// stackoverflow。com/questions/4409003 /存储每周目标在数据库中 – Tassadaque 2010-12-13 05:09:39
@Tassadaque。谢谢。完成。请投票。 – PerformanceDBA 2010-12-13 09:16:20
在这个结构中你不能。
这是一个many to many的关系,模型如此。
EDIT(审查的情况): 上述规定是不够的,确定了“精确解”
在过于简化的风险,你应该:
1)检查,如果你能坚持新的信息到任何现有的表/实体
2)如果不是,则检查是否添加属性/列到任何现有的表/ entties
3)如果不是,则添加新的表
的癸永远不会明确切断你的想法,你应该考虑几种情况及其后果。您还应该定期检查模型,以便寻找机会进行标准化,因为它会极大地影响系统的整体功能。
因此,例如,当您声明您已经拥有多组表的许多表时,现在的主要问题是天气重用该表或创建一个新表。
这取决于此表中的其他属性。也许对于你的商业模式/用例来说它是有道理的,也许它没有。
也许你需要建模一个名为“MemoRecipients”的表,它将存储收件人的信息(传递,确认等等)。那么你应该问自己,你是否需要所有这些状态的时间等等...
只有你可以确定什么是适合你的问题空间的设计决策。
我知道它是多对多的关系,但请阅读它是有点复杂 – Tassadaque 2010-06-28 10:33:30
@Tassadaque,审查和更新的情况。不幸的是答案只能以建议和建议的形式出现。 – Unreason 2010-06-28 12:48:50
看起来好像你需要继承heirarchy来实现你所描述的。考虑下面的图:
在此图中创建一个父表(我称之为海报)和雇员和组表是儿童。您必须为员工表和组表创建相同的主键,也就是说,从组到组和海报以及员工之间有一对一的链接。
这样,备忘录的poster_id字段指向超类。您可以在海报,小组和员工之间进行连接,以确定您是否指向员工或小组。
我从图表中删除了员工和组之间的关系,就像您说的那样。
请注意,这只是可能的解释,您的解决方案可能会有所不同。
感谢您的回复,但这种方法似乎存在一个问题。如果集团和员工的deos没有直接的关系,但员工和集团之间有多对多的关系,那么你提出的方法工作得很好。正如我前面提到的,我需要为每个员工存储确认信息,不管他是否属于组。如何在上述情况下处理该问题。如果我错了,请纠正我的错误 – Tassadaque 2010-06-29 06:19:17
由于员工和组之间的关系是多对多的关系,因此您将创建一个关系来表示此关系。我们称之为employee_group。这将照顾你的许多人。这仍然适用于上述设计。你能再解释一下吗? – 2010-06-29 15:20:45
Ack表示每个属于或不属于群组的雇员都必须承认他已收到备忘录。它是一个布尔型字段。这个字段是备忘录的一部分,与提案中的海报相关。所以ack将被储存在上图 – Tassadaque 2010-06-30 15:53:40
我需要存储每个员工的确认信息也 – Tassadaque 2010-06-28 10:28:36