Отношение ERD - соедините 2 необязательных объекта с 1 объектом

у меня есть эти 3 объекта: студент, персонал и обсуждение.
Их отношения таковы, что: 1 студент может публиковать много обсуждений; 1 сотрудник может публиковать множество обсуждений; но 1 обсуждение может быть опубликовано только студентом или сотрудником. Можно ли, чтобы внешние ключи studentID и staffID находились в дискуссионном объекте? но при этом каждая запись в нем может иметь 1 нулевое значение в любом из этих 2 атрибутов. введите описание изображения здесь


person Z.V    schedule 13.07.2013    source источник


Ответы (1)


Рекомендуется применять Вторую нормальную форму (2NF):

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

Второй подход: наличие базовой таблицы для обсуждения:< br> Чтобы уменьшить избыточность, у вас может быть таблица Discussion-Base, которая будет базовой таблицей для двух других сущностей: таблиц Staff-Discussion и Student-Discussion.
Таблица Discussion-Base будет содержать общие свойства.
Решение приветствуется, когда свойства таблиц Staff-Discussion и Student-Discussion различны.
Если они одинаковы и единственная разница заключается в необязательном внешнем ключе, упомянутый вами дизайн эффективен.
Надеюсь это поможет.

person Mohsen Heydari    schedule 13.07.2013
comment
Для первого подхода см. class-table-inheritance. - person Walter Mitty; 14.07.2013