关系数据库设计 - 关系问题

时间:2010-06-28 10:21:09

标签: database database-design one-to-many relational-database

我需要创建数据库表来存储备忘录。在“To”子句中,用户可以选择单个员工或员工组(在与员工有多对多关系的数据库中已有不同的组)。我想知道什么应该是表的结构。 对于没有组的简单备忘录,我将拥有“MemoMasters”和“Memodetails”,其中memodetail具有EmployeeID作为外键。我怎么能在这个结构中嵌入群组

此致

3 个答案:

答案 0 :(得分:1)

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

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

    • 在这种情况下,它是独占的:MemoAddress,即 和EmployeeAddress GroupAddress。

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

  2. 这是纯5NF;没有更新异常;完整的陈述性参照完整性。

  3. Ack在正确的位置(我使用过DateTime,但布尔也很好)。

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

  5. 不要以不同方式对待“简单备忘录”,您会遇到问题,重复代码等。

  6. 另一个问题是,您可能需要EmployeeId {strong} Employee Memo的{​​{1}},这是另一回事,为此,您需要EmployeeMemo的FK。

答案 1 :(得分:0)

在这种结构中你不能。

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

编辑(审查方案): 上述要求不足以确定“确切解决方案”

冒着过度简化的风险,你应该:

1)检查您是否可以将新信息粘贴到任何现有的表/实体中 2)如果没有,则检查是否将属性/列添加到任何现有表/进程中 3)如果没有,那么添加一个新表

决策从未明确切断,您考虑几种情况及其后果。您还应定期检查您的模型,因为它会寻找机会对其进行规范化,因为它会极大地影响系统的整体功能。

因此,例如,正如您所说的那样,您已经拥有了多个用于组的表,现在的主要问题是重复使用该表或创建新表的天气。

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

也许您需要建模一个名为“MemoRecipients”的表,该表将在收件人(交付,确认等)上存储信息。然后你应该问自己,你需要所有这些状态的时间等等......

只有您可以确定适合您的问题空间的设计决策。

答案 2 :(得分:0)

似乎你需要一个继承层次来实现你所描述的。请看下面的图表:

Database Inheritance.

在此图中,您将创建一个父表(我将其称为Poster),而employee和group表是子表。您必须为employee表和组表提供相同的主键,即从组到海报和员工到海报都有一对一的链接。

这样,备忘录的poster_id字段指向超类。您可以在海报,组和员工之间执行联接,以确定您是在引用员工还是组。

我已经从图表中忽略了员工和团队之间的关系,就像你说的那样。

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