Таблица MySQL с «вычисленными значениями» и ключами, которые являются первичными и внешними одновременно - PullRequest
0 голосов
/ 13 июня 2018

Я уже прочитал другие вопросы, такие как эти:

Можно ли иметь внешний ключ в качестве первичного ключа?

Первичный и внешний ключ вв то же время

Однако мне кажется, что ответы сильно различаются, и ответ на вопрос, может ли быть нормально иметь ключи как первичные, так и внешние, зависит от конкретной базы данных и целитаблицы, содержащей ключи.

Это было сделано в рамках экзаменационного проекта, и я должен либо иметь возможность объяснить свой дизайн базы данных, либо придумать что-то еще для своей презентации.

Мои вопросы:

Как бы вы лучше всего обосновали таблицу selected_answers в моей БД?то есть имеет ли смысл?

Все еще находится в 3-й нормальной форме?

Могу ли я сделать его другим и простым, выполняя ту же самую цельи функции текущей таблицы?

Это моя текущая реляционная модель:

Реляционная модель

Это мой текущий скрипт таблиц SQL:

таблицы SQL

Идея состоит в том, чтобы создать базу данных, которая может хранить данные «аудита» о фирме, которая хочет проверять, насколько хорошо они соответствуют GDPR.Это было задание для экзамена.

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

Ключи являются первичными ивнешние ключи таковы, что числа «уникальны», но все еще ссылаются на таблицу аудита и вопросов.

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

Для некоторыхДля большего контекста я заполнил свои таблицы «тестовыми данными», чтобы я мог использовать хранимые триггеры, процедуры и функцию.

Тестовые данные 1

Тестовые данные 2

Все вопросы предварительно заданы как question_ID 1 - 12, и все ответыanswer_ID 1-5.Таким образом, эти цифры, безусловно, будут повторяться, но для целей хранения проверок и ответов на них.

Это конечный результат, который вычисляет база данных: название компании и регистрационный номер (CVR - датский), время аудита(обновляется через сохраненный триггер), средний балл ответов и «уровень соответствия» на основе среднего балла.

Окончательный результат

Я надеюсь, что у меня естьпредоставил достаточно информации, чтобы вы могли мне помочь :-), если вам также нужно просмотреть хранимые процедуры, функции и триггеры, скажите мне, и я их загрузю.

1 Ответ

0 голосов
/ 13 июня 2018

Ваш стол имеет смысл.Вы можете рассматривать это как отношение «многие ко многим» между аудитом и вопросом (каждый аудит может ответить на многие вопросы; на каждый вопрос можно ответить во многих аудитах) с атрибутом, указывающим, какой ответ аудита на вопрос ограничен (посредствомвнешний ключ к таблице ответов) должен быть одним из заранее определенных ответов.Я также советую вам записать предикаты relvar и посмотреть, имеют ли они смысл.

Это в 3NF, если нет нечетных функциональных зависимостей (FD), о которых вы не сказали нам.Кажется, есть единственная нетривиальная FD, {Audit_ID, Answer_ID} -> {Answer_ID}, и левая часть - это суперключ (фактически, ключ), поэтому таблица находится в нормальной форме Бойса-Кодда, что подразумевает 3NF.(Я действительно не знаю, почему люди беспокоятся о 3NF, когда есть BCNF.)

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

...