MySQL DB Desgin - PullRequest
       13

MySQL DB Desgin

2 голосов
/ 25 января 2009

В моем приложении есть разные категории, в которых пользователи могут публиковать свои транзакции. Пример: еда, покупки, фильмы и т. Д. Я хочу, чтобы пользователь мог редактировать эти категории и добавлять / удалять категории. Как лучше всего хранить эту информацию в базе данных.

  1. Таблица категорий с категорией и соответствующим пользователем? Затем я могу запросить uid и получить все их категории.

  2. Таблица пользователей с полем категории и разделите категории запятой. Затем я могу запросить пользователя и разделить его категории на массив с разнесением или что-то в этом роде.

  3. ИЛИ идея, о которой я даже не думал.

Ответы [ 2 ]

2 голосов
/ 25 января 2009

Вариант 3

Таблица категорий CategoryID, Category_Name и т.д ...

Таблица пользователей ИД пользователя, имя_пользователя и т. Д.

Таблица пересечений USER_Category

ИД пользователя, ИД категории

Почему?

Если у вас есть

Имя пользователя, Имя категории

и сказать

«Джим», «Еда»
"Джо", "Еда"
"Джуди", "Косметика"

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

Также легче задавать вопросы типа «Кто тратит большую часть своих денег на еду». Если пользователь вводит категории в, вы можете получить «Еда», «Продовольственные товары», «Рестораны», и множество различных категорий, возможно, даже орфографические ошибки, такие как «fod», «fooooooooooooooooooood» и т. Д. Так что, объединив категории, которые вы можете просто выбрать на основе foodID в своих запросах.

По сути, теперь пользователь может просматривать список категорий, и если он обнаружит интересующую категорию из списка, он создаст запись UserID, CategoryID в таблице пересечений. Это снижает вероятность опечаток. Если категории нет, пользователь может добавить ее. Затем, когда следующий пользователь просматривает категории, он увидит новую запись, поэтому, если он заинтересован, он может просто щелкнуть по ней и уменьшить вероятность ее неправильного написания.

0 голосов
/ 25 января 2009

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

Читать о нормализации базы данных . Бывают случаи, когда вы не хотите полностью нормализоваться, но конкатенация различных значений с запятой не относится к этой категории.

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

Вариант 1 - это ответ.

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