当前位置: 首页 > 知识库问答 >
问题:

在数据库上保存字符串列表(MYSQL)

申炳
2023-03-14

我正在学习SQL,我试图在表中保存用户感兴趣的标记列表(通常是字符串),最好的方法是什么?是否应将所有标记保存为新表中的主键?他们是否应该有他们的on主键,而我需要比较标记,看看它是否已经存在?我完全不知道什么是最好的解决办法。

应该类似于:

}
  Name: "John",
  interests: ['Cars', 'Motorbike', 'Programming']
}

共有2个答案

仲孙子辰
2023-03-14

我推荐三个表格:

create table users (
    user_id int auto_increment primary key,
    name varchar(255),
    . . .
);

create table interests (
    interest_id int auto_increment primary key,
    interest varchar(255),
    . . .
);

create table user_interests (
    user_interest_id int auto_increment primary key,
    user_id int not null,
    interest_id int not null,
    foreign key (person_id) references users(user_id),
    foreign key (interest_id) references interests(interest_id),
    unique (user_id, interest_id)
);

。..用于有关相应实体的附加列。

为什么要为兴趣单独设置一个表?因为你想确定人们指的是同一件事。你不会希望一个人写“编程”而另一个人用“coding”来表示相同的意思。

颜高朗
2023-03-14

正如@dfundako在评论中所说,这是一个多对多关系的例子。在您的情况下,一个用户可能有多个标签,而一个标签可能属于多个用户。

建模的常用方法是交集表。

Users
-------
User_id (pk)
name
...

Tags
-----
tag_id (pk)
tag_content

user_tags
---------
user_id
tag_id

使用标记内容作为主键通常不是一个好主意--主键应该是唯一的和不可变的。如果有人想要更改标签名称,例如,因为一个错别字,会发生什么?因此,上面示例中的_id列将是人工键。

 类似资料:
  • Java MySQL数据库我正在做一个项目,将一个路径名为“C:\Desktop\”的字符串保存到数据库中。我已经创建了一个实体类来将此路径名更新到数据库中,在javaeclipse中,当我运行程序时,它会显示路径以这种格式存储在数据库中,即“C:\Desktop\”,但在该路径的数据库列中,它只存储“C:Desktop”,没有“\”

  • 我有一个通过ORM保存到数据库的对象。对象有一个字符串数组,每个对象的数组长度可以不同。我想知道在db中存储字符串数组的标准做法(例如,我是否应该将所有字符串存储在一个字段中作为csv等)?

  • 问题内容: 我有一个领域的文档表,,并包含像字符串值 U12,U13,U14,现在我当前登录的用户,我想在其中找到的所有记录包含了我的手段我就是。现在如何编写查询以获取记录。 我的查询是: 但我在“ where子句”中收到错误未知列“ U13” 问题答案: 您的字符串连接混乱了,应该是:( 进一步简化了 ) 当上面的语句被解析后,它将看起来像这样: 作为一个旁注,查询是脆弱的,如果值( 小号 变量

  • 我通过在JTextField中获取用户的输入创建了一个JList。然后,我将jList转换为String,将jList保存到Mysql数据库,因为我希望将jList项保存在单行中作为单个条目。 向JList添加用户输入的代码: 但是在使用此代码时,Jtable并不显示任何值,尽管它使用表头名称。请任何人可以检查我正确在如何搜索中保存在MySQL数据库的字符串。我认为问题是存在的,因为其他事情都很好

  • 我不能使用将字符串数组保存到我的数据库中。 (请注意,为了便于编写,下面的所有代码都被简化了) 因此,我声明了person模式的一个变量: 模式本身看起来像: 说到储蓄,它只是一个简单的问题: 所以使用邮递员,我在体内发送一个数组-然而每次我检查数据库,它只是显示一个条目与数组作为一个整体,即我如何发送它: 你知道我应该多做些什么吗?

  • 我必须创建以下程序: 创建一个允许您键入名称的程序。用户键入并提交(使用enter键)的名称应存储在arraylist中。然后,arraylist中的名称应打印在屏幕上。 我的问题是,我只能在我的数组列表中存储一个名字。 我的代码: 第一个问题是,在键入一个名称并提交后,您不能键入任何内容,因此我必须重置输入,如使用整数值: