提问者:小点点

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


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

应该类似于:

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

共2个答案

匿名用户

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

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

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

Tags
-----
tag_id (pk)
tag_content

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

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

匿名用户

我推荐三个表格:

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”来表示相同的意思。