хранение нескольких данных в одном столбце mysql и поиск данных по отдельности - PullRequest
0 голосов
/ 14 ноября 2011

У меня есть таблица mysql, используемая для оценки отдельных учеников:

studentID int(11)
studentname varchar(70)
maths_score int(11)
science_score int(11)
english_score int(11)

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

Ответы [ 4 ]

2 голосов
/ 14 ноября 2011

Вы должны всегда нормализовать такие данные в отдельные столбцы. Размещение различных данных в одном объединенном столбце является нарушением первой нормальной формы, которая является стандартом (если не обязательным) для моделей реляционных баз данных.

Однако вы можете дублировать данные в дополнительный столбец, который позволяет выполнять определенные запросы более эффективно. Дублирование - меньшее зло, чем денормализация. Например, вы можете сохранить столбец total_score, который спасет вас от повторного вычисления некоторой формы средневзвешенного значения, но было бы плохой идеей свернуть результаты в один столбец.

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

1 голос
/ 14 ноября 2011

Да, это возможно.Но ваша таблица даже не будет в первой нормальной форме.

Чтобы соответствовать правилу атомарности в этом cas, вам нужно разделить вашу таблицу на три разные таблицы.Один для хранения данных о студентах, другой - для хранения курсов (английский, естествознание), а другой - для хранения результатов тестов для каждой комбинации студент / курс.

0 голосов
/ 14 ноября 2011

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

0 голосов
/ 14 ноября 2011

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

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