【问题标题】:How to store multiple key values in single field in SQL database?如何在 SQL 数据库的单个字段中存储多个键值?
【发布时间】:2022-06-18 22:04:15
【问题描述】:

我有以下简单的示例,其中包含三个表:设备类型设备组件设备,它们由上一个数据组成两张桌子。

那么,如果设备Type 3(紧急对讲)由设备组件表的两个元素组成,我该如何在中指定它device 表的 >components 列?

我的意思是,我知道我需要 device components 表中的 ID 1、3 和 4,但是...如何在另一个表的列中引用这两个值?

我需要做this 之类的操作,或者可以在表中定义一个 json 列吗?

【问题讨论】:

  • 只需用device_type = 3components = **any device components id**再插入一行
  • 如果一个项目有多个元素,那么您需要多行。无论您做什么,不要,在任何情况下,都要屈服于将数据存储为分隔或打包(json 等)列的诱惑。
  • 请注意,表格有,而不是记录或字段。
  • 不要在数据库单元格中存储逗号分隔的列表,如果那是你要去的地方!!! is-storing-a-delimited-list-in-a-database-column-really-that-bad
  • @jarlh 我的 2001 年关于数据库的大学教科书仍然不同意你的观点。 (数据库处理基础,第 7 版)

标签: mysql sql database database-design


【解决方案1】:

您需要多行。如果紧急对讲机由按钮和扬声器组成,它看起来像这样:

ID Device_Type Components
1 3 4
2 3 5

不要,在任何情况下,都不要屈服于将数据存储为分隔或打包(json 等)列的诱惑。

【讨论】:

    【解决方案2】:

    考虑一个表:

    CREATE TABLE devices (
        id ...
        name ...
        device_type  VARCHAR(...)  -- such as "mobile intercom"
        components SET('led','handset','speaker',...)
    );
    

    【讨论】:

      【解决方案3】:

      包含列的“设备”表:ID、名称、设备类型、组件,这不是一个好主意。

      有时一个设备可以属于多种类型的设备,例如笔记本电脑可以同时用作笔记本电脑和超极本(如果您正在使用 PC 创建在线商店)。所以更好的解决方案是创建像“设备类型”和“组件”这样的子表。每一个都应该有自己的PK ID和device_id指向设备ID。

      下面是这种解决方案的示意图:

      希望我能帮上忙。

      【讨论】:

        猜你喜欢
        • 2012-05-21
        • 2021-01-29
        • 2023-03-19
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        • 2018-04-16
        • 1970-01-01
        • 2015-02-22
        相关资源
        最近更新 更多