【问题标题】:Implementing relationship databases scheme实施关系数据库方案
【发布时间】:2017-04-04 17:39:37
【问题描述】:

嘿,我必须创建数据库,它应该类似于以下方案: http://imgur.com/a/UdFKr

但没有“联系人”表。这甚至可能吗?

还有一个问题: 如何将几个值放入单个字段?是否可以,或者我需要创建额外的表?

http://imgur.com/5Op7FXt

【问题讨论】:

  • 您当然可以创建一个由其他 4 个表组成的数据库,但如果没有 contact 表,它的用处将有限。
  • 不要将多个值放入单个元组中。这违反了 1NF,并且使用起来非常痛苦。当您遇到想要执行此操作的人时,这是一个明确的信号,您需要一个表格来存储该信息。
  • 那么我的概念是不是很合理? 'contact'表只包含一个字段不是问题吗?
  • 您如何看待这个概念? imgur.com/a/L7uIu
  • 请把所有可以是文本的东西都变成文本。就像您的架构和示例表一样(使用代码格式来对齐列)。不要依赖图像。

标签: mysql sql-server database foreign-keys


【解决方案1】:

可以在没有联系表的情况下对此进行建模。 一个解决方案可能是将 Employee 表放在 de 模型的中心。然后,您可以使用一对多关系将 Phone_number 和 Email_address 表链接到 Employee 表,就像它们当前被建模为 Contact 一样。由于一个 Employee 可以有多个电子邮件地址和多个电话号码,这些表应该有一个 Employee 的外键。

您唯一需要记住的是 Employee 表与 Company 表之间关系的基数。为了消除数据冗余,您可能希望在其中建立多对多关系,因为一个员工可能有多个雇主,而一个公司可能属于多个员工。这意味着您最终将拥有一个联结表。

希望这能回答你的问题。

【讨论】:

    【解决方案2】:

    根据外键鱼尾纹的通常解释阅读您的设计图,每个公司、员工、电子邮件地址和电话号码都只有一个联系人,每个联系人都至少有一个。因此,Contact 中的 id 集始终是其他四个表中的联系人 id 集的并集。所以你不需要联系。 (但是,如果一个联系人可以在不与其他四个实体中的任何一个关联的情况下存在,那么仅这四个表就无法记录这些业务情况。)

    我猜是不清楚“如何将几个值放入单个字段?”您的意思是如何将多个值放入一个字段中。选择一个以您可以撤消/反转的方式将多个值映射到单个值的函数。但是,如果您对使用单个值进行查询感兴趣,那么您不应该这样做,这是一个糟糕的设计。研究一下。 (这通常被称为违反 1NF,但这取决于 1NF 的含义,该术语用于表示很多不同的事物。最终,在可以说违反它的情况下,1NF 本身取决于值的哪一部分你希望能够查询。)

    【讨论】:

      猜你喜欢
      • 2012-03-13
      • 1970-01-01
      • 2012-01-10
      • 2017-08-09
      • 2015-04-01
      • 2010-12-30
      • 2021-04-16
      • 2018-02-02
      • 2010-12-21
      相关资源
      最近更新 更多