Nano Hash - криптовалюты, майнинг, программирование

Как хранить типы данных метаданных

Как хранить метаданные для описания активов? Учитывая, что я заранее не знаю, какие поля метаданных у меня будут.

У меня есть таблица с активами (скажем, лица), таблица с полями метаданных ("имя", "возраст", "день рождения",...) таблица со значениями метаданных, которая ссылается на таблицу полей метаданных (" John Doe", 44, "1968-10-10", ...) и метаданные перекрестной таблицы, которые связывают поля метаданных с активами.

Моя проблема заключается в том, как мне обрабатывать различные типы данных в таблице полей метаданных. «Джон Доу» — текст, 44 — целое число, 10.10.1968 — дата.

Сохраню ли я их в текстовом поле в своей таблице полей метаданных, но смогу ли я сравнивать даты?

Или я сохраняю тип данных в этой таблице и делаю 3 поля для txt, int и даты. Но тогда у меня много пустых полей.

Или я создаю разные таблицы полей метаданных для каждого типа данных (например: metadatafields_txt, metadatafields_int, metadatafields_date), но тогда я не могу правильно связать таблицу метаданных.

Какова лучшая практика здесь?

tx

17.02.2012

Ответы:


1

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

Третий вариант должен быть жизнеспособным - вместо внутреннего соединения с одной таблицей вы должны оставить соединение с тремя разными таблицами в своем запросе.

Как говорит Ойген, это зависит от того, знаете ли вы заранее, сколько записей метаданных (только по порядку величины — тысячи, миллионы, больше?) вы ожидаете иметь, и вероятно ли, что они будут преимущественно одного типа?

17.02.2012
  • у меня будет много метаданных, в основном описывающих текст непредсказуемой длины. Мне придется использовать текстовые поля, а не varchar. Поэтому я думаю, что лучше всего использовать одну таблицу, тогда у меня будет правильный внешний ключ для кросс-таблицы метаданных. И я мог бы содержать поле txt, целочисленное поле (для хранения целых чисел, логических значений, дат unix) и поле типа данных (txt/int/date/bool) 17.02.2012

  • 2

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

    В тот момент, когда вы захотите запросить свои метаданные, держитесь подальше от текстового представления, иначе вы будете сожжены 8<10 против '8'>'10' и друзьями. В этом случае я рекомендую вам либо иметь таблицу метаданных с 3 полями, либо даже иметь 3 таблицы метаданных. Я подозреваю, что лучше всего иметь одну таблицу с 3 полями - запросы по-прежнему довольно просты, а пустая трата пространства управляема (int - 4 байта, пустой varchar - 2 или 3 байта).

    Кстати: вы могли бы хорошо использовать поле int для других типов данных: сохраняя временную метку unix для даты, вы могли бы избежать некоторой магии UNIX_TIMESTAMP() или FROM_UNIXTIME() позже. Для строк вам может понадобиться длина (особенно если вы используете C-ish API)

    17.02.2012
  • Я обнаружил, что (в mysql) можно сделать запрос следующим образом: выберите * из mdvalues ​​WHERE CONVERT (значение, подписанное) > 0 ORDER BY CAST (значение AS подписанное) ASC. Возможно ли тогда просто сохранить мои значения в текстовом поле и сохранить тип данных в другом поле. Все в одной таблице? 18.02.2012
  • Конечно, это было бы возможно - просто это было бы неразумно: вы потеряли бы возможность использовать индекс (поскольку сравнение вычисляемых значений не может использовать индекс) и превратили бы каждый запрос в полный сканирование таблицы вычисляемых значений. 21.02.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..