SQL - 需要帮助将架构转换为表、外键、主键

问题描述

我一直在努力查看模式并将其转换为关系数据库模型。如果这是我的模式,我的表、主键和外键应该如何显示,或者换言之,此特定模式的最佳数据库设计是什么?我正在寻找关于我所拥有的正确或错误的反馈,为什么会这样。我制作了 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
  ]
}

ERD of the preceding code

解决方法

假设我们从 techcos 开始:

techcos (techcos_id PK)

如果 tags 指代 techcos,我们会执行以下操作:

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

如果关系是One to One,我们可以在unique constraint上添加一个tags.techcos_id,这样没有两个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可以引用同一个{{1 }},我们需要一个单独的表来处理这些映射。

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

我们现在有:

tags

techcos (techcos_id PK)

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

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

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