#angular #typescript #mongodb
Вопрос:
У меня есть две идеи, но я не знаю, какое из них является лучшим решением. ПЕРВЫЙ Сценарий:
РЕДАКТИРОВАТЬ: размер ингредиентов может составлять 2000/3000 предметов
одна структура данных, подобная этой:
export const ingredients = [
{
id : '8f011ac5-b71c-4cd7-a317-857dcd7d85e0',
title : 'Strawberry',
content : 'Strawberry',
allergens: ['20b9-44d9-f47c92e5-917f-9ff4ad25df00'],
image : 'assets/images/cards/fragola.jpg',
labels : ['e2f749f5-41ed-49d0-a92a-1c83d879e371'],
status : 'public',
owner : 'admin',
favorites : false,
createdAt: moment().hour(10).minute(19).subtract(98, 'day').toISOString(),
updatedAt: null
},
{
id : 'ced0a1ce-051d-41a3-b080-e2161e4ae621',
title : 'Choccolate Mix',
content : 'Choccolate Mix',
allergens: ['20b9-44d9-f47c92e5-917f-9ff4ad25df00'],
image : '',
labels : [
'bbc73458-940b-421c-8d5f-8dcd23a9b0d6',
'b1cde9ee-e54d-4142-ad8b-cf55dafc9528'
],
status : 'public',
owner : 'admin',
favorites : false,
createdAt: moment().hour(15).minute(37).subtract(80, 'day').toISOString(),
updatedAt: null
},
…
…
export const allergens = [
{
id : '20b9-44d9-f47c92e5-917f-9ff4ad25df00',
name: 'Dairy',
status: true,
image: 'assets/icons/allergens/00_ic_allergen_DairyProducts.svg'
},
{
id : '20b9-44d9-f47c92e5-917f-9ff4ad25df01',
name: 'Egg',
status: true,
image: 'assets/icons/allergens/01_ic_allergen_Egg.svg'
},
…
где в массиве ингредиентов указан только идентификатор аллергена ингредиента
ВТОРОЙ Сценарий:
export const ingredients = [
{
id : '8f011ac5-b71c-4cd7-a317-857dcd7d85e0',
title : 'Strawberry',
content : 'Strawberry',
allergens: allergens: [
{gluten: {checked: false,
image: 'assets/icons/allergens/02_ic_allergen_Gluten.svg'
types: [
{wheat: {checked: false}},
{spelt: {checked: false}},
{khorasan: {checked: false}},
{rye: {checked: false}},
{barley: {checked: false}},
{oats: {checked: false}},
]}},
{shellfish: {checked: false, image: 'assets/icons/allergens/11_ic_allergen_Crustaceans.svg'}},
{eggs: {checked: false, image: 'assets/icons/allergens/01_ic_allergen_Egg.svg'}},
{fish: {checked: false, image: 'assets/icons/allergens/13_ic_allergen_Fish.svg'}},
{peanut: {checked: false, image: 'assets/icons/allergens/05_ic_allergen_Peanuts.svg'}},
{soyabeans: {checked: false, image: 'assets/icons/allergens/04_ic_allergen_Soy.svg'}},
{milk: {checked: false, image: 'assets/icons/allergens/00_ic_allergen_DairyProducts.svg'}},
{nuts: {checked: false,
image: 'assets/icons/allergens/03_ic_allergen_PeelFruits.svg'
types: [
{almond: {checked: false}},
{hazelnuts: {checked: false}},
{walnuts: {checked: false}},
{cashewnuts: {checked: false}},
{pecans: {checked: false}},
{brazilnuts: {checked: false}},
{macadamianuts: {checked: false}},
{pistachios: {checked: false}}
]}},
{celery: {checked: false, image: 'assets/icons/allergens/10_ic_allergen_Celery.svg'}},
{mustard: {checked: false, image: 'assets/icons/allergens/09_ic_allergen_Mustard.svg'}},
{sesame: {checked: false, image: 'assets/icons/allergens/08_ic_allergen_SesameGrains.svg'}},
{sulfites: {checked: false, image: 'assets/icons/allergens/06_ic_allergen_Sulphites.svg'}},
{lupini: {checked: false, image: 'assets/icons/allergens/07_ic_allergen_Lupins.svg'}},
{clams: {checked: false, image: 'assets/icons/allergens/12_ic_allergen_Mollusks.svg'}}
],
image : 'assets/images/cards/fragola.jpg',
labels : ['e2f749f5-41ed-49d0-a92a-1c83d879e371'],
status : 'public',
owner : 'admin',
favorites : false,
createdAt: moment().hour(10).minute(19).subtract(98, 'day').toISOString(),
updatedAt: null
},
для каждого ингредиента у меня есть полная структура аллергена ингредиента.
Я создаю одно приложение в Angular с серверной частью в узле с подключением REST API, но в будущем я хотел бы переписать серверную часть с помощью API GraphQL.
Спасибо за ваши предложения.
Комментарии:
1. каков размер
allergens
полей ?2. Я редактирую свой вопрос, размер ингредиентов может составлять 2000/3000 наименований, поэтому для каждого ингредиента может быть 2/3/4 аллергена максимум, как правило
3. получение полного объекта ингредиента с аллергеном в объекте , если весь аллерген будет в ингредиенте для сбора данных, я думаю, что производительность выше, чем у объекта отношения, но если вы хотите переключиться на GraphQL для разработки схемы, я думаю, что реляционная проще
4. по своей интуиции я бы выбрал первое решение