Каков наиболее эффективный способ хранения и запроса hastags в базе данных MYSQL? - PullRequest
0 голосов
/ 25 мая 2019

Я нахожусь в процессе структурирования моей таблицы MYSQL, я создаю платформу с Laravel, где пользователь может загрузить изображение, которое содержит описание. Это описание будет включать хэштеги.

Теперь мне интересно, какой самый эффективный подход может быть для хранения описания и его поиска.

Первоначально я думал о том, чтобы сохранить описание целиком в одном текстовом столбце и выполнить простой поиск после индексации столбца. Это позволит пользователю выполнять поиск по хэштегам и общим словам.

Затем я подумал, не будет ли эффективнее извлечь хэштег и сохранить его в своей таблице на основе удостоверения личности с фотографией. Эта идея будет работать хорошо, если бы она могла выполнять поиск только по тегам, но вы также можете выполнять поиск и по обычным словам.

Может ли кто-нибудь подтвердить, какой может быть лучший подход, или даже предложить другой.

Спасибо

1 Ответ

1 голос
/ 25 мая 2019

Как вы храните данные, зависит от того, как вы хотите получить доступ к данным.

Если вы хотите когда-либо см. описания и хеш-теги, затем вы можете поместить их в одно неиндексированное поле и извлекать их для каждого изображения.

Из того, что вы укажете, вы, похоже, захотите столбец descriptions, который можно искать как текст.Это может быть достаточно для ваших целей.

Однако, если вы хотите иметь возможность задавать вопросы конкретно о хеш-тегах, таких как:

  • Какие хеш-теги есть в базе данных и какмногие?
  • Какие хеш-теги имеются на определенном изображении или наборе изображений?
  • Какие хеш-теги объединяют два изображения?
  • Какие хеш-теги "содержат" другиехеш-теги (т.е. #cat и #catamaran)?

Тогда вам понадобится отдельная таблица хеш-тегов.Моя рекомендация будет объединить два.Что-то вроде:

create table images (
    imageId int auto_increment primary key,
    description text,
    createdAt datetime,
    createdBy varchar(255),
    fulltext (description)
);

create table imageHashtags as (
    imageHashtagId auto_increment primary key,
    imageId int not null,
    hashtag varchar(255),
    constraint fk_imagehashtags_imageid foreign key (imageid) references images(imageid),
    index (hashtag)
);

Возможно, вам понадобится справочная таблица для самих хэштегов, чтобы они не дублировались в таблице.Недостаточно информации, чтобы понять, насколько это хороший подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...