База данных SQL: столбец таблицы имеет отношение к себе - PullRequest
0 голосов
/ 06 октября 2018

Добрый день, приятель, у меня есть вопрос здесь.Я пытаюсь сделать простую систему регистрации, поэтому я подошел к столу "предметы".Проблема состоит в том, что в этой таблице тем есть столбец обязательных данных, в котором значение является другой темой из этой таблицы.

E.g
| subID    | title         | prerequisite   |
|    345   | math54        | 555            |
|    555   | physi43       | null           |

Мой вопрос: правильно ли я это делаю?С моей точки зрения, это не потому, что я вообще не могу сделать внешний ключ.И, что еще хуже, один предмет у меня есть несколько обязательных значений

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Вы пытаетесь отобразить отношения 1: n.Как правило, вы не делаете это с одним столбцом.Вы можете выразить это, используя таблицу Prerequisites:

create table prerequisites (
    prerequisites_id int, -- auto-incremented, serial, identity
    subject_id int references subjects(subject_id),
    depends_on_subject_id int references subjects(subject_id)
);

Поскольку курсы могут меняться со временем, предпосылки также могут быть.Это, в свою очередь, предлагает таблицу типа 2, означающую, что для зависимости существует эффективная и конечная дата.Тем не менее, это может быть сложно для работы, которую вы делаете сейчас.

0 голосов
/ 06 октября 2018

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

MAIN_ID |PREREQUISITE_ID

, который позволяет вам иметь несколько отношений.Вы можете использовать MAIN_ID в качестве ключа, если у вас может быть одно или ни одного отношения, и MAIN_ID + PREREQUISITE_ID, если у вас может быть более одного на ID.

...