Как спроектировать таблицу с первичным ключом и многозначным атрибутом?
Я интересуюсь дизайном базы данных и сейчас читаю соответствующую литературу. Через книгу я столкнулся со странным примером, который заставляет меня чувствовать себя неуверенно. Есть отношение
В этой таблице у нас есть составной первичный ключ (StudentID, Activity). Но ActivityFee частично зависит от ключа таблицы (Activity -> ActivityFee), поэтому автор предлагает разделить это отношение на два других:
Теперь, если мы посмотрим на STUDENT_ACTIVITY, Activity становится внешним ключом, а отношение все еще имеет составной первичный ключ.
У нас есть таблица, в которой целые столбцы определяют составной первичный ключ, это нормально?
Если это не так, что мы должны делать в этом случае? (возможно, определите суррогатный ключ?)
Как можно справиться с многозначным атрибутом (в нашем случае Activity), чтобы устранить возможные аномалии данных?
2 ответа
Нет ничего плохого в составном ключе-кандидате. (Если ваша ссылка не говорит в терминах ключей-кандидатов, т. Е. Если она говорит о первичных ключах в любом другом случае, кроме случаев, когда просто есть только один ключ-кандидат, получите новую ссылку.)
Ваш текст расскажет вам, что такое хороший и плохой дизайн. Нет смысла беспокоиться о том, что каждое свойство, которое вы замечаете в отношении отношения, может быть "плохим". Вид "хорошего", к которому в настоящее время обращаются, - это термин "нормализация".
"Активность" не является "многозначным атрибутом". "Многозначный" атрибут является нереляционным понятием. Термин часто, но неправильно используется для обозначения либо "атрибута" в нереляционной "таблице", который каким-либо образом (который никогда не объясняется) имеет более одной записи на "строку", либо столбца в реляционной таблице, который имеет значение с несколькими похожими частями (набор, список, сумка, таблица и т. д.), которое каким-либо образом (что никогда не объясняется) не относится к элементам, например, строки и цифры, или к столбцу в реляционной таблице, имеющей значение с кратным различные части (запись, кортеж и т. д.), которые так или иначе (что никогда не объясняется) не относятся, скажем, к датам. (Иногда его даже неправильно применяют для обозначения набора атрибутов с похожими именами и значениями, которые следует заменить одним атрибутом со строкой для каждого исходного имени.) (Это просто случаи нежелательных проектов.) Получается многозначное значение используется как антоним аналогично неправильно употребляемого / злоупотребляемого термина "атомный".
Наличие одного и того же (значения или) подстроки значений, встречающихся более одного раза в столбце или таблице, опять-таки не является хорошим или плохим как таковым. Опять же, ваша ссылка расскажет вам, что такое хороший дизайн.
Таблица, которая состоит только из составного ключа, вполне подходит, если она соответствует вашим бизнес-требованиям.
Активность не является многозначным атрибутом. Для каждого кортежа существует одно значение для активности.