Какой тип базы данных мне нужно использовать, если я хочу, чтобы пользователи сохраняли теги и могли вызывать уже использованные теги? - PullRequest
0 голосов
/ 24 января 2010

Я пытаюсь реализовать функцию, похожую на функцию тегов StackOverflow. Чтобы пользователь мог создать новый тег или набрав список уже созданных похожих тегов.

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

Итак, у меня есть две таблицы:

Company
    id
    email
    name
    companySize
    countryOfOrigin
    industryid

Industry
    id
    description

Каждый раз, когда пользователь пишет новый тег, я хочу создать его с уникальным идентификатором, а также иметь возможность искать существующие теги.

Позволит ли этот дизайн базы данных легко и эффективно реализовать эту функцию?

Если нет, пожалуйста, дайте небольшое руководство. :)

Ответы [ 2 ]

1 голос
/ 24 января 2010

Несмотря на то, что нет большого количества информации для продолжения, то, что вы перечислили, должно быть хорошо. («Тег» - это поле «описание» в отраслевой таблице и т. Д.)

Как вы можете себе представить, вся настоящая работа выполняется вне SQL, где вам нужно ...

  1. (Потенциально) добавить новые теги, которые еще не существуют.
  2. Свяжите отрасль с поставляемыми тегами.
  3. (Потенциально) удаляет ранее использованные теги, которые могут больше не использоваться.

... каждый раз, когда вы редактируете отрасль.

Тем не менее, ключевым ограничением предлагаемой вами установки является то, что каждая компания может принадлежать только к одной отрасли. (т. е. с ним может быть связан только один отраслевой тег.)

Таким образом, вы можете рассмотреть схему в соответствии с ...

Company
    id
    ...
    countryOfOrigin

Industries
    id
    description

CompanyIndustriesLookup
    companyID
    industryID

... что позволит вам связать несколько отраслей / тегов с определенной компанией.

Обновление ...

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

SELECT Industries.description FROM (CompanyIndustriesLookup, Industries)
WHERE companyID=1 AND industryID=Industries.ID
ORDER BY Industries.description ASC;

Аналогичным образом, чтобы все компании были отмечены отраслью "тестирования", вы должны использовать ...

SELECT Company.name FROM (Company, Industries, CompanyIndustriesLookup)
WHERE Company.id=CompanyIndustriesLookup.companyID
AND Industries.id=CompanyIndustriesLookup.industryID
AND Industries.description="testing"
ORDER BY Company.name ASC
0 голосов
/ 24 января 2010

Очень простое (хотя и несколько неоптимальное, но часто неважное) решение использовать теги - вообще не иметь идентификаторов тегов. Итак, у вас есть:

Items
    ItemId
    Name
    Description
    ...

ItemTag
    ItemId 
    Tag

Добавление тега к элементу - это просто добавление кортежа в таблицу ItemTag, независимо от того, существует ли тег уже или нет. И вам не нужно делать какие-либо бухгалтерии на удаление тегов либо. Просто сохраните индекс ItemTag.Tag, чтобы иметь возможность быстро отображать все уникальные теги.

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