Моделирование 1 ко многим отношениям, которые повторяются несколько раз - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть три таблицы Initiative, Category и Forecasts.Отношение 1 ко многим во всех таблицах.

Initiative может иметь несколько Category может иметь несколько Forecasts

Initiative может быть либо повторяющимся, либо не основанным на том, что имена Category могут различаться.Например, для повторяющегося Initiative он будет иметь набор определенных Categories, которые будут повторяться для всех Initiatives повторяющегося типа.

А прогнозы будут по категориям по месяцам года.Вот как это сейчас, и скрипка здесь

enter image description here

С этим подходом связано то, что для каждой инициативыДля конкретного типа название категории повторяется много раз, хотя оно одно и то же.

Другая проблема заключается в том, что когда нам нужно добавить инициативу определенной категории, нам нужно будет поддерживать еще одну таблицу AllInitiative со всеми Инициативами и всеми категориями, чтобы первоначально сопоставить их с таблицей Category.После чего прогнозы могут быть добавлены к вновь добавленной инициативе и категории.

Как мне лучше спроектировать эту структуру так, чтобы у меня была одна таблица AllInitiative, которая содержит все типы инициатив ровно один раз, и таблица AllCategory, которая имеет список категорий для каждого типа инициативы.

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

1 Ответ

0 голосов
/ 28 ноября 2018

Вы можете иметь таблицу Initiative со всеми инициативами один раз, еще одну для Category, а для отношений 1-n вам нужна таблица связывания, например Initiative_Category, в которой у вас есть внешние ключи для инициативы и категории,

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

    +---------------+-------------------+
    | initiative_id |    category_id    |
    +---------------+-------------------+
    |       1       |         2         |
    |       1       |         3         |
    +---------------+-------------------+
...