Sql 标记数未知的一个条目的数据结构

Sql 标记数未知的一个条目的数据结构,sql,database,csv,Sql,Database,Csv,这里没有。我试图创建一个类或数据结构,其中每个条目都有一个唯一的名称和未知数量的描述性标记。我希望数据结构也可以很容易地导出为某种通用格式(我猜CSV无法满足我的要求,因为我认为我需要多个分隔符?) 作为背景,我试图定义这个数据结构,以便以后我可以实现一种方法来提取每个条目并查看所有标记,还可以实现一种方法来搜索哪些条目包含特定的标记 下面是一个我将要查看的原始数据的示例,其中包含一个唯一的名称、一个非唯一的编号和未知数量的非唯一标记 Name: Jim Age: 47 Descriptors

这里没有。我试图创建一个类或数据结构,其中每个条目都有一个唯一的名称和未知数量的描述性标记。我希望数据结构也可以很容易地导出为某种通用格式(我猜CSV无法满足我的要求,因为我认为我需要多个分隔符?)

作为背景,我试图定义这个数据结构,以便以后我可以实现一种方法来提取每个条目并查看所有标记,还可以实现一种方法来搜索哪些条目包含特定的标记

下面是一个我将要查看的原始数据的示例,其中包含一个唯一的名称、一个非唯一的编号和未知数量的非唯一标记

Name: Jim
Age: 47
Descriptors (Tags): Fat, Tall, Wrinkly

Name: Bob
Age: 88
Descriptors: Sad

Name: Charlie
Age: 12
Descriptor: Tall, Ugly

在数据库中,您通常会使用至少两个表来执行此操作:

  • 用户
  • UserTags
第二个表每个用户和每个标记都有一行。插入新标记就是在此表中插入一行:

userId  tag
  1     tall
  1     ugly
如果标签必须来自指定的列表,那么通常会有第三个表,
tags
,以确保标签有效


有些数据库支持在一行中包含多个值的结构。数组或JSON数组也是一种可能的解决方案。但是,我将从数据库中的标准规范化表示开始。

以下是我将如何设计表

Person Table

Person ID   Name       Birthdate
----------------------------------
        1   Jim       1973-10-02
        2   Bob       1932-06-02
        3   Charlie   2008-12-25


Descriptor Table

Descriptor ID   Person ID   Tag
--------------------------
            1           1   Fat
            2           1   Tall
            3           1   Wrinkly
            4           2   Sad
            5           3   Tall
            6           3   Ugly
两个表的ID字段都是一个自动递增的整数。它们也被称为盲键。它们除了将表连接在一起之外没有其他意义

两个表的ID字段都是主键(集群键)。描述符表中的Person ID是指向Person表的外键

每个人的姓名和出生日期显示一次

当您想要从描述符表中检索标记时,您需要指定个人ID。您可以使用姓名或出生日期间接地执行此操作

SELECT Tag FROM Descriptor Table, Person Table
WHERE Person ID Descriptor = Person ID Person
AND Name = 'Bob'

上述SQL无效,但我希望您能理解。

既然您标记了SQL,我假设您想要使用关系数据库。您将创建一个带有姓名和年龄的Person表,以及一个指向Person行的描述符表,每个描述符一行。Jim将有三个描述符行,Bob将有一个描述符行。维基百科的文章,将提供更多的细节。谢谢吉尔伯特!澄清一下,当您说Jim将有3个描述符行时,您的意思是SQL中的描述符表中的数据将为每个描述符有一行,并且人员的姓名将在列中吗?因此,如果两个人有相同的描述符,那么他们将在同一行中的描述符?或者,你是说每一行只包含一个名称和一个描述符?我在我的示例中添加了第三个人来说明。嗯,我不知道有像CONTAINS命令这样的东西。因此,也许标记是文本,那么也许它们可以全部转储到一个单元格中,并在SQL环境中使用CONTAINS命令进行搜索。谢谢!你能解释一下“第二个表中每个用户和每个标记有一行”是什么意思吗?你的意思是每一行只包含一个描述符和一个名称(即两个单元格)?或者,你是说每一行都包含一个唯一的描述符和未知数量的名称?谢谢!谢谢更新!@rfii…好的。我想这对你来说还不够清楚。更新清除了它!感谢你为我们解释一切Noobs非常感谢!我用谷歌搜索了“盲键”“与SQL相关,但没有用,但是说我可以不使用描述符ID列是正确的吗?或者说它存在的原因是什么?我看到您提到用于连接表的盲键(并了解这在Person表中的重要性),但我不确定如何使用描述符ID连接任何内容,但我认为可能适用于其他情况。对吗?我在每张桌子上都放了盲键,即使它们目前还没有使用。每个表都需要一个主键,而盲主键又短又唯一。