Нормализация вложенных много ко многим - PullRequest
0 голосов
/ 21 мая 2018

Я ищу способ нормализовать отношения между многими вложенными.

Однако это происходит, когда модель имеет несколько уровней глубины, например, категории в приведенном ниже примере.В выходных данных идентификатор местоположения 27 содержит только идентификаторы категорий 1 и 7 (что, как я полагаю, объясняется тем, что именно так показывает последняя версия местоположения 27).Каков наилучший подход к нормализации данных этого типа?

Было бы хорошим вариантом использовать идентификатор магазина в этом месте?т.е.

"locations": {
    "1-27": {
        "id": 27,
        "label": "Birmingham",
        "categories": [
            1,
            2,
            7
        ]
    },
    "2-27": {
        "id": 27,
        "label": "Birmingham",
        "categories": [
            1,
            7
        ]
    }
},

Спасибо, что нашли время, чтобы прочитать это!

Дополнительные данные Подробнее

База данных

Shops
    id
    label
Locations
    id
    label
Location_Shop
    location_id
    shop_id
Categories
    id
    label
Category_Location
    category_id
    location_id

Пример данных

    [
    {
        id: 1,
        label: 'First Shop',
        locations: [
            {
                id: 27,
                label: 'Birmingham',
                categories: [
                    {
                        id: 1,
                        label: 'Car Park',
                    },
                    {
                        id: 2,
                        label: 'Petrol Station',
                    },
                    {
                        id: 7,
                        label: 'Bakery',
                    },
                ],
            },
        ],
    },
    {
        id: 2,
        label: 'Second Shop',
        locations: [
            {
                id: 27,
                label: 'Birmingham',
                categories: [
                    {
                        id: 1,
                        label: 'Car Park',
                    },
                    {
                        id: 7,
                        label: 'Bakery',
                    },
                ],
            },
        ],
    },
]

Код

const categorySchema = new schema.Entity('categories');
const locationSchema = new schema.Entity('locations', {
    categories: [categorySchema],
});
const shopSchema = new schema.Entity('shops', {
    locations: [locationSchema],
});

Выход

{
    "entities": {
        "categories": {
            "1": {
                "id": 1,
                "label": "Car Park"
            },
            "2": {
                "id": 2,
                "label": "Petrol Station"
            },
            "7": {
                "id": 7,
                "label": "Bakery"
            }
        },
        "locations": {
            "27": {
                "id": 27,
                "label": "Birmingham",
                "categories": [
                    1,
                    7
                ]
            }
        },
        "shops": {
            "1": {
                "id": 1,
                "label": "First Shop",
                "locations": [
                    27
                ]
            },
            "2": {
                "id": 2,
                "label": "Second Shop",
                "locations": [
                    27
                ]
            }
        }
    },
    "result": [
        1,
        2
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...