我正在学习SQL,我试图在表中保存用户感兴趣的标记列表(通常是字符串),最好的方法是什么?是否应将所有标记保存为新表中的主键?他们是否应该有他们的on主键,而我需要比较标记,看看它是否已经存在?我完全不知道什么是最好的解决办法。
应该类似于:
}
Name: "John",
interests: ['Cars', 'Motorbike', 'Programming']
}
正如@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”来表示相同的意思。