Дизайн метки расширения классификации контента

база данных
  • суг команда
  • Добавить Автора

Роли: продукт Ван Сяо Т., программист Сяо С.


Маленькая Т: Маленькая Си, у меня есть работа. Мы хотим создать онлайн-систему банка вопросов, где учителя могут искать вопросы для подготовки уроков.

Сяо С посмотрел на черновик простого требования и подумал про себя: «У меня есть несколько миллионов юаней в минуту», и он на самом деле попросил меня выполнить такое простое требование. Недостаточно создать список тем.

Small C: Откуда берутся данные заголовка и какие атрибуты они содержат?

Little T: Мы купили данные вопросов для первого выпуска у компании A. Вопросы включают текст, варианты ответов, типы вопросов и сложность.

Маленький С: Ну, то есть я хочу построить таблицу вопросов, включающую эти пять атрибутов. Какие бывают типы и уровни сложности?

Small T: существует пять типов вопросов: с одним выбором, с несколькими вариантами ответов, суждением, заполнением пропусков и ответом. Есть 3 уровня сложности: легкий, нормальный и сложный. Пользователи могут фильтровать вопросы по типу или сложности. Xiao C взял ручку и нарисовал: Хорошо, часы разработаны

таблица t_question

поле Атрибуты описывать
uid char(32) уникальный идентификатор
body TEXT текст
options JSON параметры темы
answer TEXT Отвечать
type int(11) Тип вопроса, 1 одиночный выбор, 2 множественных выбора, 3 суждения, 4 заполнить пропуск, 5 ответов
difficult int(11) Сложность: 1 легкая, 2 нормальная, 3 сложная

Малый C: поиск нечеткого соответствия на основе тела, параметров, а затем фильтрация, чтобы интерфейс прошел по типу = 1 или сложно = 3, чтобы отфильтровать тип вопроса и сложность.

Little T: Вау, это действительно надежно, так что давайте подключимся к сети.


Little T: Little C, наша система банка вопросов была отправлена ​​​​на рынок, и многие пользователи сообщили, что количество вопросов недостаточно Недавно мы нашли сотрудничество с компанией B, надеясь интегрировать банк вопросов компании B. в нашу систему Структура данных Она очень похожа на данные компании А, вы можете видеть, сколько времени это займет.

Маленький С подумал про себя, что этот продукт не создает проблем, это просто портер проблем.

Little C: Просто направляйте данные, и все готово. Просто пришлите мне документацию по интерфейсу, чтобы подключить его.

Маленький Т: Хорошо, я пришлю тебе документ позже.

После получения интерфейса вопроса компании B общая структура вопроса остается неизменной, но классификация типов вопросов и сложности немного больше, чем у компании A. Типы вопросов включают вопросы с множественным выбором, вопросы с множественным выбором, аналитические вопросы, общие вопросы о декомпозиции и вопросы о декомпозиции APP. Типы вопросов легкие, нормальные, сложные и чрезвычайно сложные.

Маленький С подумал про себя: я иду, я хочу использовать предметную классификацию какой компании в качестве эталона. Итак, я нашел маленькую Т

Малый C: Если данные должны быть интегрированы, можно ли превратить вопросы анализа, общие вопросы декомпозиции и вопросы декомпозиции приложений компании B в наши вопросы решения. Поскольку сейчас нет определенного стандарта, я не очень хорошо умею интегрировать данные.

Маленький Т: Хорошо, давай сначала сделаем, как ты говоришь.


С тех пор Xiao T нашел еще две компании для сотрудничества и позволил Xiao C интегрировать данные. Кроме того, Сяо Т считает, что данные одного из методов компании (метод сопоставления, метод исключения, метод исключения) и данные способности (способность рассуждать, способность анализа, вычислительная способность) также являются очень важными параметрами и надеются быть дополненными.

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

таблица t_question

поле Атрибуты описывать
uid char(32) уникальный идентификатор
body TEXT текст
options JSON параметры темы
answer TEXT Отвечать
type int(11) Тип вопроса, 1 одиночный выбор, 2 множественных выбора, 3 суждения, 4 заполнить пропуск, 5 ответов
difficult int(11) Сложность: 1 легкая, 2 нормальная, 3 сложная
ability int(11) Атрибуты способностей, 1 способность рассуждать, 2 аналитические способности. . . .
method int(11) Атрибуты метода, 1 метод сопоставления, 2 метода исключения, 3 метода исключения. . .
  1. В настоящее время в банке вопросов содержится 300 Вт данных, и в будущем он будет увеличиваться.Если таблица часто изменяется, таблица будет напрямую заблокирована в сети.
  2. Если мне придется посмотреть, какие значения должны быть сопоставлены с теми значениями, которые мы определяем для каждой классификации, я определенно буду ошеломлен позже, потому что у нас нет единого набора стандартов. . .

Сяо С понял, что прыгнул в большую яму, и оказалось, что это не так просто, как он думал сначала.

После тщательного рассмотрения Сяо С пришел к выводу:

  1. В отрасли вообще нет набора стандартов, и его необходимо расширять в соответствии с точками изменения
  2. Различные темы компании имеют разные размерные данные (например, у компании есть еще два измерения возможностей и метода)
  3. Разные компании имеют разные значения данных в одном и том же измерении (например, тип вопроса компании B отличается от типа вопроса компании A)

Создавайте таблицы специально для меток

  • В одной категории ярлыков есть несколько значений ярлыка
  • Упражнение с несколькими атрибутами тега

таблица t_tag

поле Атрибуты описывать
uid char(32) уникальный идентификатор
tag_name varchar(64) Классификация этикеток
tag_key varchar(64) ключ метки

таблица t_tag_value

поле Атрибуты описывать
uid char(32) уникальный идентификатор
tag_id char(32) идентификатор категории тега
value_name varchar(64) имя значения тега
value_code varchar(64) Кодировка значения тега

таблица t_question_tag

поле Атрибуты описывать
id char(32) уникальный идентификатор
tag_value_id char(32) идентификатор значения тега
question_id char(32) идентификатор темы

При выполнении запроса идентификатор запрошенной темы сначала находится в таблице t_question_tag, чтобы найти набор tag_value_id. После агрегации тега по GROUP BY tag_id получается следующий json

[{
分类名:难度, 
分类key: difficult,
值列表:[{
    值名:简单, 
    值编码: 1
},{
    值名:一般, 
    值编码: 2
},{
    值名:困难, 
    值编码: 3
}]}
]

Возвращая агрегацию тегов, ее можно отобразить во внешнем интерфейсе.

难度:简单,一般,困难
题型:选择题,判断题,作文,完形填空。。。
方法:配方法,消元法。。。。

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

Расширенное резюме:
  1. Если в будущем таблица данных может содержать огромное количество данных, невозможно часто увеличивать поля таблицы из-за изменения спроса. Рассмотрите возможность добавления промежуточной таблицы для расширения.
  2. Когда общая информация о данных объекта неопределенна, вы также можете рассмотреть возможность использования извлечения NOSQL.Например, если разработаны следующие документы, вы можете использовать функцию запроса массива NOSQL для извлечения объекта, соответствующего тегу.
{
    "uid":"",
    "description":"",
    "tag_ids":["标签1","标签2","标签3"]
}
  1. Дизайн также может быть применен к электронной коммерции, такой как классификация продуктов и скрининг.
颜色:黄色,蓝色,绿色
尺码:M,L,XL,XXL
风格:休闲,商务
  1. Ярлыки подходят только для ограниченного числа категорий, таких как размер файла, цена, и эти нефиксированные атрибуты не могут быть превращены в ярлыки.
  2. Для поля метки не требуется сортировка, например сортировка по определенной категории. Поскольку позиционирование тегов является ограниченной классификацией, сортировка не имеет смысла, а теги можно использовать только для фильтрации. Если сортировка необходима, рекомендуется дополнительно рассчитать метки и другие атрибуты для расчета поля оценки.
вопрос:
  1. Почему значение тега делится на идентификатор тега и код тега?

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

  1. Почему вам нужно передавать ключ и значение во внешнем интерфейсе, а не напрямую передавать uid метки?

В некоторых сценариях требуются настраиваемые бизнес-метки, например для провинций и городских районов. Когда пользователи используют их, они хотят использовать национальный региональный код, например 101100, для проверки меток.

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