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

Базы данных структуры для неизвестных столбцов

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

Путь 1 пересекает конечные точки point_1, point_2, point_3, point_4 и point_5
Path_1 = p1-p2-p3-p4-p5
Путь 2 пересекает конечные точки point_1, point_2 и point_5
Path_1 = p1-p2-p5


Структура базы данных:

path_id | start_point | point_1 | point_2 | point_3 | end_point |
--------|-------------|---------|---------|---------|-----------|
    1   |     p_1     |   p_2   |   p_3   |   p_4   |    p_5    |
    2   |     p_1     |   p_2   |         |         |    p_5    |

И так далее...

Моя проблема в том, что я не всегда буду знать, сколько точек он пересечет. Их может быть 5 или больше 15. Как мне структурировать базу данных, чтобы я мог распределять переменное количество баллов? (порядок пути важен)

Чтобы добавить к этому, каждый путь точка-точка также имеет связанный с ним идентификатор. Например, p1-p2 = 0001 и p2-p3 = 0002

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

Вероятно, это неправильная настройка базы данных для этих нужд, любые другие предложения приветствуются.


Ответы:


1

Столбцы представляют собой метаданные, а ваши точки на самом деле являются данными. Возможно, лучший дизайн будет:

path_id | point 
--------|-------------
    1   |  p_1     
    1   |  p_2     
    1   |  p_3     
    1   |  p_4  
    1   |  p_5     
    2   |  p_1  
    2   |  p_2     
    2   |  p_5  

Конечно, вам следует подумать о добавлении столбцов для дополнительной информации (например, «порядок», если это уместно) и Великобритании для этих двух объединенных столбцов.

Оператор SELECT будет SELECT * FROM table WHERE point = 'p_1';

20.10.2015
  • этого недостаточно, OP нужно сохранить порядок точек на пути (я думаю), поэтому вы можете добавить 2 других столбца, например id и nextId 20.10.2015
  • Вы правы, хотя не было сказано, что это необходимо. Если это так, я предложил добавить столбец «заказ» (сбрасывается для каждого path_id). 20.10.2015
  • @Alex Порядок точек важен, поскольку путь от p_5 до p_3 не совпадает с путем от p_3 до p_5. 20.10.2015

  • 2

    Использование СУБД для иерархической структуры данных (особенно бесконечных циклов) не рекомендуется, поэтому графовая база данных был создан.
    Neo4j элегантно обслужит ваш образец.

    Для реляционного решения вы можете использовать шаблон перечисления путей.
    Путь UNIX, такой как /usr/local/lib/, представляет собой перечисление путей файловой системы, где usr является родителем локального, который, в свою очередь, является родителем lib .
    Вы можете создать таблицу, содержащую граф путей (иерархию элементов), назвав ее EnumPath.

    введите здесь описание изображения

    Я хочу запросить все пути, которые пересекают определенную точку (например, Pn)

    SELECT EnumPath.PathName from EnumPath
    WHERE EnumPath.Path LIKE '%Pn%'
    

    Пути, начинающиеся с Pn:

    SELECT EnumPath.PathName from EnumPath
    WHERE EnumPath.Path LIKE 'Pn%'
    

    Пути, заканчивающиеся на Pn:

    SELECT EnumPath.PathName from EnumPath
    WHERE EnumPath.Path LIKE '%Pn'
    

    Я хочу запросить все пути, пересекающие определенные точки (например, Pk и Pi...)

    SELECT EnumPath.PathName from EnumPath
    WHERE EnumPath.Path LIKE '%Pk%'
    AND EnumPath.Path LIKE '%Pi%'
    AND ...
    

    Более полный ответ на этот вопрос можно найти здесь.

    22.10.2015
    Новые материалы

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

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

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

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

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

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

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