2012-03-29 5 views
0

Я разрабатываю онлайн-сайт (используя Django и Mysql). У меня есть таблица «Тесты» и «Таблица пользователей».правильный подход к хранению в базе данных

У меня есть 50 тестов в таблице, и каждый пользователь завершает их в своем собственном темпе. Как сохранить статус тестов в моей БД?

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

 
userid | username | testscompleted 
1  john  1, 5, 34 
2  tom  1, 10, 23, 25 

Другой идеей было создать отдельную таблицу для хранения идентификаторов пользователей и testid. Итак, у меня будет только 2 столбца, но тысячи строк (нет тестов * нет пользователей), и они всегда будут продолжать увеличиваться.

 
userid | testid 
1  1 
1  5 
2  1 
1  34 
2  10 

ответ

0

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

Вторая таблица будет не только удобнее поддерживать при попытке добавить или удалить значения, но также, скорее всего, будет работать лучше, так как вы сможете эффективно индексировать эти столбцы.

0

Существует две фразы, которые должны автоматически дисквалифицировать любую идею дизайна базы данных.

  • создать одну таблицу на одну [ничего]
  • столбец, содержащий [ничего] разделены запятой

отдельную таблицу, две колонны - you're на правильном пути там.

+0

, но это приведет к росту размера стола. Это общедоступный сайт и предполагается, что все пользователи (скажем, 10000), наконец, завершат тесты, будет 10000 * 50 строк. – John

+0

@John 500 000 строк, похоже, много, но это по-прежнему очень маленькая таблица по стандартам базы данных. Скажем, что каждая строка состоит из 3 столбцов int. Это 12 байт в строке. 12 байтов * 500 тыс. Строк - это всего лишь * 5.7MB *. –

+0

@John: Таблицы должны расти, когда вы помещаете в них полезные данные. –

Смежные вопросы