- суг команда
- Добавить Автора
Роли: продукт Ван Сяо Т., программист Сяо С.
Маленькая Т: Маленькая Си, у меня есть работа. Мы хотим создать онлайн-систему банка вопросов, где учителя могут искать вопросы для подготовки уроков.
Сяо С посмотрел на черновик простого требования и подумал про себя: «У меня есть несколько миллионов юаней в минуту», и он на самом деле попросил меня выполнить такое простое требование. Недостаточно создать список тем.
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 метода исключения. . . |
- В настоящее время в банке вопросов содержится 300 Вт данных, и в будущем он будет увеличиваться.Если таблица часто изменяется, таблица будет напрямую заблокирована в сети.
- Если мне придется посмотреть, какие значения должны быть сопоставлены с теми значениями, которые мы определяем для каждой классификации, я определенно буду ошеломлен позже, потому что у нас нет единого набора стандартов. . .
Сяо С понял, что прыгнул в большую яму, и оказалось, что это не так просто, как он думал сначала.
После тщательного рассмотрения Сяо С пришел к выводу:
- В отрасли вообще нет набора стандартов, и его необходимо расширять в соответствии с точками изменения
- Различные темы компании имеют разные размерные данные (например, у компании есть еще два измерения возможностей и метода)
- Разные компании имеют разные значения данных в одном и том же измерении (например, тип вопроса компании 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 Затем вы можете отфильтровать темы, связанные с тегом.
Расширенное резюме:
- Если в будущем таблица данных может содержать огромное количество данных, невозможно часто увеличивать поля таблицы из-за изменения спроса. Рассмотрите возможность добавления промежуточной таблицы для расширения.
- Когда общая информация о данных объекта неопределенна, вы также можете рассмотреть возможность использования извлечения NOSQL.Например, если разработаны следующие документы, вы можете использовать функцию запроса массива NOSQL для извлечения объекта, соответствующего тегу.
{
"uid":"",
"description":"",
"tag_ids":["标签1","标签2","标签3"]
}
- Дизайн также может быть применен к электронной коммерции, такой как классификация продуктов и скрининг.
颜色:黄色,蓝色,绿色
尺码:M,L,XL,XXL
风格:休闲,商务
- Ярлыки подходят только для ограниченного числа категорий, таких как размер файла, цена, и эти нефиксированные атрибуты не могут быть превращены в ярлыки.
- Для поля метки не требуется сортировка, например сортировка по определенной категории. Поскольку позиционирование тегов является ограниченной классификацией, сортировка не имеет смысла, а теги можно использовать только для фильтрации. Если сортировка необходима, рекомендуется дополнительно рассчитать метки и другие атрибуты для расчета поля оценки.
вопрос:
- Почему значение тега делится на идентификатор тега и код тега?
Код ярлыка можно изменить и настроить, например, пусть простое определение будет 1, а сложное — 2. Если заголовок напрямую привязан к 1, он может конфликтовать с другими категориями. Например, тип вопроса 1 — это вопрос с несколькими вариантами ответов.
- Почему вам нужно передавать ключ и значение во внешнем интерфейсе, а не напрямую передавать uid метки?
В некоторых сценариях требуются настраиваемые бизнес-метки, например для провинций и городских районов. Когда пользователи используют их, они хотят использовать национальный региональный код, например 101100, для проверки меток.
Сделав это, Сяо С немного успокоился, а затем вы пришли к данным компании, если есть новая категория, вы можете добавить категорию метки и значение метки. Если в той же категории есть новое значение, сначала проверьте, соответствует ли китайское название категории новой метке, а затем позвольте продукту интегрировать метку или считать ее двумя разными метками. Никогда не бойтесь снова консолидировать данные.