2009-01-24 125 views
2

在我的应用程序中,我有不同的类别,用户可以将其事务处理为。 示例:食物,购物,电影等。 我希望用户能够编辑这些类别并添加/删除类别。 将此信息存储在数据库中的最佳方式是什么?mySQL DB设计

  1. 包含类别和相应用户的类别表?然后我可以查询uid并获取所有的类别。

  2. 用户表瓦特/​​类别字段和由逗号单独的类别。然后我可以查询用户,并将他们的类别分成一个数组,其中爆炸或沿着这些线。

  3. 或想法,我都没有想到的。

回答

0

如果您可能将它们用作单个值(例如,只有一个类别),则不要在数据库字段中用逗号分隔条目。

阅读database normalization。有些情况下,你不想一路正常化,但用逗号连接不同的值不属于这一类。

不要害怕表。数据库通常为此进行优化。如果速度变慢,请创建索引或使用其他优化技术。

选项1是答案。

2

选项3

A分类表 类别ID,CATEGORY_NAME等...

用户表 用户ID时,USER_NAME等

的交点表USER_Category

用户ID, CATEGORYID

为什么?

如果你有

用户名,类别名称

“吉姆”, “食品”
“乔”, “食品”
“朱迪”, “美容产品”

如果因为您不再对她的交易感兴趣而删除“Judy”,那么您也会失去“美容产品”类别。这种方式类别和用户是分开的。

提问像“谁将大部分钱花在食物上”这样的问题也更容易。如果用户输入类别,你可能会得到“食品”,“杂货”,“外出就餐”和大量不同的类别,甚至可能会出现拼写错误,如“fod”,“fooooooooooooooooood”等等。您可以根据查询中的foodID进行选择。

基本上现在用户可以浏览类别列表,如果他们从列表中发现他们感兴趣的类别,他们将在交集表中创建条目UserID,CategoryID。这减少了拼写错误的可能性。如果该类别不存在,用户可以添加它。然后,当下一个用户查看类别时,他们将看到新条目,因此如果他们感兴趣,他们可以点击它并减少拼写错误的机会。