【问题标题】:SQL - Need help translating schema into tables, foreign keys, primary keysSQL - 需要帮助将架构转换为表、外键、主键
【发布时间】:2021-07-31 21:22:39
【问题描述】:

我一直在努力研究架构并将其转换为关系数据库模型。如果这是我的模式,我的表、主键和外键应该如何看待,或者换句话说,对于这个特定模式来说,最好的数据库设计是什么?我正在寻找我所拥有的是否正确或不正确的反馈,为什么会这样。我制作了 5 个表格 TechCompany、图片、网址、标签和 FriendIds。我向 TechCompany 添加了 3 列:Url_Id、Tag_Id、Friend_Id。我将它们设为主键,并将它们映射到我的 Urls、Tags 和 FriendIds 表中的 Id。这些表中的 Id 是我的外键。

TechCos 图片
TechCos 网址
TechCos 标签
TechCos Friend_Ids


{
  "name": "string",
  "profile": "string",
  "summary": "string",
  "headline": "string",
  "contactInformation": "string",
  "slug": "string",
  "statusId": "NotSet",
  "images": [
    {
      "imageTypeId": 0,
      "imageUrl": "string"
    }
  ],
  "urls": [
    "string"
  ],
  "tags": [
    "string"
  ],
  "friendIds": [
    0
  ]
}

【问题讨论】:

  • 我相信你会为我解决这个问题,但是现在没有帮助我不知道是否需要为 Urls、Tags 和 FriendIds 分别设置一个参考表或者如果最好只有一个参考表来将 TechCompanies 引用到 Urls、Tags 和 FriendIds。如果正确的解决方案是分别为 Urls、Tags 和 FriendIds 提供一个参考表,我实际上会有点震惊,因为总共有 8 个表。这似乎是过多的表格。
  • 很高兴您提供了您的设计文本 not just an ERD picture of it.,但与 DDL 相比,这种格式很难阅读,而且您实际上并没有明确地说代码转储是您的设计.既然是这样,我会把你的图片内联。

标签: sql datatables foreign-keys relational-database primary-key


【解决方案1】:

假设我们从techcos开始:

techcos (techcos_id PK)

如果tags 引用techcos,我们会执行以下操作:

tags (tag_id PK, techcos_id references techcos (techcos_id))

如果关系是One to One,我们可以在tags.techcos_id上添加一个unique constraint,这样没有两个tags可以引用同一个techcos行。

tags (tag_id PK, techcos_id references techcos (techcos_id), unique (techcos_id))

如果关系是One to Many,我们可以省略那个unique constraint,这样多个tag可以引用同一个techcos_id

tags (tag_id PK, techcos_id references techcos (techcos_id))

如果关系是Many to Many,那么多个tag可以引用同一个techcos_id,多个techcos可以引用同一个tag,我们需要一个单独的表来处理这些映射。

techcos_tags ( techcos_id, tag_id ),我们从tags 表中删除techcos_id 引用。

我们现在有:

techcos (techcos_id PK)

tags (tag_id PK)

techcos_tags ( techcos_id, tag_id ),以及 primary key constraint(或 unique constraint)对 (techcos_id, tag_id) 以避免重复。

表之间的所有其他关系都可能遵循类似的模式。

请随时澄清您的上述问题,如果需要,我将对此进行扩展。

【讨论】:

  • 没有什么可以澄清你回答了我的问题。谢谢!
  • 其实我有个问题。我们以 stackOverflow 为例。在他们底部的问题提交页面上,您可以添加标签。那么在后端的这种情况下,每个问题提交与附加到它们的标签之间的关系是 M 对 M 关系还是 1 对 M 关系?
  • 这将是多对多,因为每个标签可以与多个提交相关联,而一个提交可以有多个标签。
  • 还有几个问题。在我的 TechCos_Tags 表上,不是两列(techCos_Id 和 tag_Id)都应该是 PK 和 FK?我正在尝试开始创建我的表并在新查询中执行所有操作,而不是手动“设计”表,但是由于某种原因,当我尝试将 TechCos_Tags 表中的两个列都设为 PK 时,SSMS 会抱怨?我不明白主键可以包含一列或多列。它与我的“CONSTRAINT TechCos_Id UNIQUE(Tag_Id)”语句有关吗?
  • 没关系,我做了 PRIMARY KEY (TechCos_Id, Tag_Id) 并且有效,但在那之后我尝试了 UNIQUE (TechCos_Id, Tag_Id) 并且我得到了一个错误的语法,期待 '(' 或 SELECT 警告。
猜你喜欢
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
相关资源
最近更新 更多