【问题标题】:SQL column containing array of table row values包含表行值数组的 SQL 列
【发布时间】:2017-01-31 04:14:20
【问题描述】:

我对数据库和 SQL 很陌生。我有一个任务,但我不知道如何解决这个问题。

假设我有一个名为Persons 的表。它具有以下列:userId(主键)、userNametags

Tags 是另一个表,仅包含idtagName。 Person 可以有多个标签,例如:“football”、“cooking”等。

每个标签对应Tag 表行。但我不确定如何实现这种关系。我怎样才能做到这一点?

我猜这与外键有关,并且让 person 标签列成为外键数组。

【问题讨论】:

    标签: sql foreign-keys


    【解决方案1】:

    您通常希望有一个关系表(这称为多对多关系,或 M:M)。

    Persons(id int, name varchar(40)...)
    
    Tags(id int, name varchar(40)....)
    
    PersonTags(id int,
               personid FOREIGN KEY References Persons(id), 
               TagId FOREIGN KEY references Tags(id))
    

    这样,您可以拥有任意数量的标签,但标签数据不会为个人存储在行内。您可能会在一个字段中存储一系列值,但由于各种原因,这是一个非常糟糕的想法。

    【讨论】:

    • 只是补充@JNK 的回答。您可以使用 ON DELETE CASCADE 选项为 PERSONS 创建外键,这意味着当一个人被删除时,属于它的所有标签(PersonTags 上的记录)也将被删除,但标签本身不会发生任何事情标签表
    • 这是一个糟糕的想法的原因是什么?
    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 2021-11-26
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2012-12-05
    相关资源
    最近更新 更多