2

ユーザーがTo-Doタスクを(多かれ少なかれ)CRUDできるようにするアプリ用にこのデータベースを設計する最良の(最も論理的な)方法を見つけようとしていますが、それらはハードコードされたカテゴリに編成されています.

たとえば、お気に入りのデパートに行こうとしているとします。女性のフロアに行き、ガールフレンドが注文した靴とそれに合うドレスを受け取る必要があります (店完全に反対側にありますが、同じフロアにあります)。弟のために売り場に行って、ショーツを 2 組、パンツを 1 組、新しい靴を 1 組選びます。

レディース フロアとボーイズ デパートは、ショッピング リストのアイテムが分類されるカテゴリの 2 つの例です。

したがって、次のようになります。

* 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 は実際のショッピング リストになります (active は 0/1 になるため、ユーザーは商品を購入したことを思い出させたり、カートに入れたりすることができます)。

アイテムには、To Do タスクに入れることができるアイテムのリストがあります。バックエンドでこれらを自分たちで分類します。

これは正しい方法ですか?

4

1 に答える 1

4

問題の説明を正しく理解していることを願っていますが、データベースとモデルをレイアウトする方法の 1 つを考えていました。また、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と呼ばれる別の結合テーブルを使用できると思いますアイテムは」にあります。

于 2013-05-09T23:35:32.793 に答える