Хранить ссылки между объектами в базе данных или в системе рекомендаций? - PullRequest
0 голосов
/ 26 апреля 2018

Для веб-приложения с системой рекомендаций, основанной на машинном обучении, мы размышляем, где хранить ссылки между объектами;в нашей таблице базы данных или в нашей системе рекомендаций (доступ через API)?

Упрощенный регистр

Система работает следующим образом:

  1. Пользователь выбираетодин или несколько ингредиентов

  2. Соответствующие идентификаторы для выбранных ингредиентов, отправленные по рекомендации API

  3. API возвращает список идентификаторов ингредиентов (рекомендации)

  4. Данные для списка ингредиентов, извлеченные из базы данных (например, имена, изображения и т. Д.) И отображенные на веб-странице

На той же веб-странице для каждого списка ингредиентовдолжна отображаться следующая ссылочная информация:

  • категория

Примечание. Это упрощенный пример.В действительности нам приходится иметь дело с сотнями ссылок, подобных этой


Традиционное решение - хранить ссылки внутри таблиц

В этом случаеAPI simple возвращает список рекомендуемых идентификаторов ингредиентов:

{
    recommendations: [ingredient1, ingredient2 ...] 
}

Эти идентификаторы используются для получения информации об ингредиентах и ​​категориях (имена, изображения и т. Д.) Из нашей базы данных:

- ingredient
    - id
    - name
    - imageUrl
    - categoryId --> Reference to category table

- category
    - id
    - name
    - iconUrl

Альтернативное решение - Хранить ссылки внутри системы рекомендаций

В этом случае API отправит обратно список объектов ингредиентов вкл.ссылки :

{
    ingredientId1: {
        categoryReference: categoryId
        ...
    },
    ingredientId2: {
        categoryReference: categoryId
        ...
    }
    ...
}

Чтобы база данных могла быть простой без ссылок:

- ingredient
    - id
    - name
    - imageUrl

- category
    - id
    - name
    - iconUrl

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

Супер стремление услышать ваши мысли на основе вашего прошлого опыта.

Заранее спасибо

...