【问题标题】:DB table design for attributes with multiple entries (eg: Person -> Social Media)具有多个条目的属性的数据库表设计(例如:人员 -> 社交媒体)
【发布时间】:2016-04-14 21:08:08
【问题描述】:

我正在尝试确定存储员工数据的数据库表的结构。我对如何设计诸如地址、社交媒体等属性有点困惑。应该为单个员工记录提供多个社交媒体条目(例如:Facebook、Twitter、LinkedIn 等)。

哪个是好的设计:

  1. 为社交媒体创建单独的表(带有类型和 URL/hanlde) 或
  2. 在员工表本身内创建几个重复字段以存储社交媒体数据。 (例如:fb_url、twtr_handle、ln_url)

为这些属性创建单独的表会不会有点过头了?属性“社交媒体”只是一个示例,我们将在员工表中有许多属性,这些属性将包含 1 到 4 个条目(例如:电话号码、地址、电子邮件地址)

谢谢

【问题讨论】:

  • 你好。这并不是更快的解决方案,因为您必须评估所有优点和缺点,但是您可以尝试使用诸如 ad mongodb 之类的 nosql 数据库。这将允许您使用灵活的架构
  • 为什么要在这里使用 nosql 解决方案?灵活的架构很可能不是您想要的。

标签: java mysql database database-design


【解决方案1】:

在 NoSQL 数据库中,我会选择选项 2。 在关系模式中,我认为选项 1 更好。如果您想添加新的社交媒体 (Instagram f.i.),它将只是社交媒体表中的另一个条目。但是,如果您在 Person 中添加社交媒体,则需要在表格中添加一个新列。

【讨论】:

    【解决方案2】:

    两种解决方案都可以。

    不为社交媒体信息创建单独的表的主要缺点是需要在Employee 表中为将来出现的每种新社交媒体类型添加新列。当应用程序已经投入生产时,更改数据库架构通常有点让人头疼。

    因此,请记住这一点,我建议创建一个单独的 SocialMedia 表,该表将具有以下结构:

    | SocialMedia | username | employeeId |
    

    其中employeeId 列将是Employee 表的外键

    【讨论】:

      猜你喜欢
      • 2014-12-09
      • 1970-01-01
      • 2018-08-28
      • 2018-10-22
      • 2023-03-26
      • 1970-01-01
      • 2017-03-29
      • 2011-01-18
      • 1970-01-01
      相关资源
      最近更新 更多