2013-05-09 495 views
2

我想弄清楚为应用程序设计这个数据库的最佳(最合逻辑的)方法,该程序将允许用户执行(或多或少)CRUD待办任务,然而,它们被组织成硬编码类别。分类待办事项应用程序的数据库设计

假设你即将去你最喜欢的百货公司。你需要打女性的地板,并拿起她的女朋友她订购的鞋子和匹配的衣服(这是在商店的另一边,但在同一层。)然后,你需要去男孩系为你的弟弟,并拿起两条不同的短裤,一条裤子和一双新鞋。

妇女的地板和男孩的部门是购物清单项目将落入类别的两个例子。

所以它看起来像这样:

* Women's Floor 
    1 Pair Shoes 
    1 Dress 

* Boy's Department 
    2 Shorts 
    1 Pant 
    1 Pair Shoes 

所以我的数据库设计可能看起来是这样的...

Categories: id, title 
ListIndex: id, user_id 
ShoppingList: id, listindex_id, category_id, item_id, order, active 
Items: id, name, category_id 

分类将男孩的部,女子自由体操等,用户也不会能够创建新类别,但是我们可以预先定义类别

ListIndex将作为一个整体提供与购物清单的主关系。

ShoppingList将是实际的购物清单(主动将0/1,因此用户可以有一种方式来提醒自己,他们买了项目/把它放在自己的车。)

项目将有一个可用于投入待完成任务的项目列表。我们将在后台对这些进行分类。

这是正确的做法吗?

+0

这听起来很好,除了我不明白为什么ListIndex必要? – jokklan 2013-05-09 21:38:58

+0

@jokklan因此,每个列表总共有一个主列表。 – 2013-05-09 21:43:41

+0

你的意思是一个主清单是什么意思?我敢肯定你应该可以做任何你想要的而没有ListIndex,它看起来像不必要的膨胀。 – 2013-05-09 23:22:54

回答

4

希望我正确理解问题的描述,但我想这里有一种方法可以将数据库和模型放在外面。我也不认为你需要的ListIndex:

数据库表

Categories: id, title 

ShoppingLists: id, user_id, order, active 

Items: id, title 

ShoppingListItems: id, item_id, shopping_list_id, quantity 

CategorizedItems: id, category_id, item_id 

Users: id, name 

模型

User: 
has_many shopping_lists 

ShoppingList: 
belongs_to user 
has_many shopping_list_items 
has_many items, through shopping_list_items 

Items: 
has_many categorized_items 
has_many categories, through categorized_items 
(optional: you could query an item for the shopping lists that it is on) 
has_many shopping_list_items 
has_many shopping_lists, through shopping_list_items 

Categories: 
has_many categorized_items 
has_many items, through categorized_items 

我的想法是这样的 -

个别种类基本上都是静态的,这是相当直截了当。
购物清单表示用户(通过user_id)将购买的物品清单。项目和购物清单之间的链接可以在名为ShoppingListItems的连接表中进行,其中每行将列表,项目和数量之间的关系链接在一起。

项目很有趣,因为在您的示例中,某个项目实际上可以分为多个类别。即“裤子”可以在男孩/女孩/男人/女人和可能的宠物:(为了支持,我认为你可以使用另一个名为CategorizedItems的连接表,基本上可以让你查询“特定类别的物品”或“类别项目是在“。

+0

您值得拥有一颗金色的星星。但我可以给你一个绿色检查。感谢您的超级详细解释。 karma_points belongs_to mariozig。 – 2013-05-09 23:52:54

+0

非常感谢!我很感激。如果您发现我提到的任何错误,请发表评论。我没有实际测试/编码这些东西。 – 2013-05-09 23:54:24

+0

不要担心。我或多或少地想要在概念上验证它。而你做到了。 :) – 2013-05-09 23:59:26

相关问题