0

自己学習の目的で、各リストが一意の URL を取得する TODO リストを作成する単純な Web アプリケーションを作成しようとしています。現在、次のデータベース設計を使用しています。テーブルには、各リストのonlinelist.listURL とパスワードが格納されます。各onlinelist.itemリストに格納されているアイテムを格納します。

onlinelist.list                   onlinelist.item
+----+-----+-------------+        +----+---------+-----+
| ID | URL |  Password   |        | ID | Content | URL |
+----+-----+-------------+        +----+---------+-----+
|  1 | abc | rfk49gh34   |        |  1 | apple   | abc |
|  2 | pqr | 12345       |        |  2 | banana  | xyz |
|  3 | xyz | password123 |        |  3 | milk    | pqr |
+----+-----+-------------+        |  4 | beef    | abc |
                                  |  5 | egg     | abc |
                                  |  6 | pasta   | xyz |
                                  |  7 | lemon   | pqr |
                                  |  8 | carrot  | xyz |
                                  +----+---------+-----+

表にいくつかの URL が繰り返されているのが気になりonlinelist.itemます。「abc」に保存されているリストのすべてのリスト項目を取得するには、テーブルのすべての要素を調べて、URL が「abc」に等しいものを見つける必要があります。(これが SELECT ステートメントの仕組みだと思います。) リスト アイテムを削除する場合も、この検索を実行する必要があります。

検索で無関係なエントリを調べる必要がないようにonlinelist.abconlinelist.pqrリストごとに個別のテーブルを作成すると、より効率的ではないでしょうか。しかし、それでは、またはonlinelist.xyZという名前のテーブルを持つことはあまり意味がないと思います。私はすでに良いデザインを持っていますか?onlinelist.abconlinelist.xyz

4

1 に答える 1

0

オブジェクトを設計するときは、それらの関係に注意する必要があります。あなたの例から、2 つのオブジェクトが表示されます。

プロパティを含む TODO リスト:

  • ID
  • URL
  • パスワード

プロパティを持つ TODO アイテム:

  • ID
  • コンテンツ

アイテムの URL プロパティは、アイテムが属するリストではなく、アイテムにバインドされていないようです。

これを関係の観点から見ると、TODO アイテムは TODO リストに「属している」、または TODO リストには TODO アイテムのコレクションが含まれていると言えます。

このために、リストとアイテム エンティティ間に 1:N マッピングがあります (1 つのリストには N 個のアイテムがあり、1 つのアイテムは 1 つのリストに属します)。

この関係を記録するには、TODO アイテム テーブルを次のように変更します。

onlinelist.list                   onlinelist.item
+----+-----+-------------+        +----+---------+--------+
| ID | URL |  Password   |        | ID | Content | ListId |
+----+-----+-------------+        +----+---------+--------+
|  1 | abc | rfk49gh34   |        |  1 | apple   |   1    |
|  2 | pqr | 12345       |        |  2 | banana  |   3    |
|  3 | xyz | password123 |        |  3 | milk    |   2    |
+----+-----+-------------+        |  4 | beef    |   1    |
                                  |  5 | egg     |   1    |
                                  |  6 | pasta   |   3    |
                                  |  7 | lemon   |   2    |
                                  |  8 | carrot  |   3    |
                                  +----+---------+--------+

複数のリストでアイテムを共有したい場合、2 つのテーブルだけではこれを行うことはできなくなりましたが、マッピング テーブルを作成する必要があります。

その場合、onlinelist.item テーブルの ListId をそのままにして、新しいテーブルを作成します。

onlinelist.mapping         
+----+--------+----------+ 
| ID | ListId |  ItemId  | 
+----+--------+----------+ 
|  1 |    1   |     1    | 
|  2 |    1   |     2    | 
|  3 |    2   |     1    | (with more mapping going on)
+----+--------+----------+ 
于 2013-03-12T09:12:41.197 に答える