gpt4 book ai didi

mysql - 在数据库中存储标签的最佳实践?

转载 作者:IT老高 更新时间:2023-10-28 23:47:54 31 4
gpt4 key购买 nike

我开发了一个网站,该网站使用标签(关键词)对照片进行分类。现在,我的 MySQL 数据库中有一个具有以下结构的表:

image_id (int)
tag (varchar(32))

每次有人为图像添加标签(如果标签有效且有足够的选票),它就会被添加到数据库中。我认为这不是最佳的处理方式,因为现在我有 5000 多张带有标签的图像,标签表有超过 40000 个条目。我担心这会开始影响性能(如果它还没有影响的话)。

我考虑过这种其他结构,认为获取与特定图像关联的标签会更快,但是当我想要获取所有标签或最受欢迎的标签时,它看起来很糟糕:

image_id (int)
tags (text) //comma delimited list of tags for the image

是否有正确的方法或两种方法或多或少相同?想法?

最佳答案

使用多对多表将 TAG 记录链接到 IMAGE 记录:

图片

DROP TABLE IF EXISTS `example`.`image`;
CREATE TABLE `example`.`image` (
`image_id` int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (`image_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

标签

DROP TABLE IF EXISTS `example`.`tag`;
CREATE TABLE `example`.`tag` (
`tag_id` int(10) unsigned NOT NULL auto_increment,
`description` varchar(45) NOT NULL default '',
PRIMARY KEY (`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

IMAGE_TAG_MAP

DROP TABLE IF EXISTS `example`.`image_tag_map`;
CREATE TABLE `example`.`image_tag_map` (
`image_id` int(10) unsigned NOT NULL default '0',
`tag_id` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`image_id`,`tag_id`),
KEY `tag_fk` (`tag_id`),
CONSTRAINT `image_fk` FOREIGN KEY (`image_id`) REFERENCES `image` (`image_id`),
CONSTRAINT `tag_fk` FOREIGN KEY (`tag_id`) REFERENCES `tag` (`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

关于mysql - 在数据库中存储标签的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3508207/

31 4 0