0

私のアプリケーションでは、ユーザーがデータを sqlite ファイルに保存できます。一意のテーブル名を確保するために、ユーザーが「保存」を押したときに、(日付/時刻) 形式の名前でテーブルを作成したいだけです。すべてのテーブルの名前を明示的に指定せずに、sqlite ファイルにすべてのテーブルをロードする方法はありますか?

sqlite ファイルに食品のリストがあります。sqlite ファイルには、その中の各食品に関する一連の情報が含まれています。ユーザーは、sqlite ファイルを調べてリストにアイテムを追加することで、独自のレシピを作成できます。リスト内の各項目は、テーブル ビュー内のセルで表されます。レシピが完成したら、ユーザーがそれを保存できるようにして、システムがこのレシピを別のテーブル ビューのセルとして自動的に追加できるようにします。そうすれば、誰かがセルを選択すると、次のテーブルビューにレシピ全体が表示されます (セル タイトルとしてのレシピの名前だけではありません)。

4

1 に答える 1

1

SQLite データベースを正しく使用していないと思います。

ユーザーデータ項目ごとにテーブルを使用しているようです。

データベースの強みは、複数のユーザー、複数のアイテム、または複数のデータをいくつかのテーブルに格納し、後で特定のユーザーまたはアイテムのデータのみを取得できることです。テーブルには行を追加、更新、または削除する必要がありますが、一般に、テーブルを個別のデータ要素として作成および破棄することはできません。

あなたが理解していないのは、結合の概念だと思います。

あなたが説明するデザインは、次のようになります。

User
---------------
ID
First_Name
Last_Name
Email_Address

Ingredient
---------------
ID
Name
Description

Recipe
---------------
ID
User_ID
Name
Description
Serving_size
Ingredients_ID
Date_Created

Recipe_Ingredients
---------------------
ID
Ingredient_ID
Quantity
Unit_of_measure

So to get to get a list of recipes for John Doe (this query assumes you can only have one John Doe), you'd do:

select * from Recipe r
where r.User_ID = (select ID from User where First_Name = 'John' and Last_Name='Doe')

または、材料を含むレシピのリストを取得するには:

   select * from Recipe r
    join Recipe_Ingredients ri on r.Ingredients_ID = ri.ID
    join Ingredient i on ri.Ingredient_ID = i.ID
    where r.User_ID = (select ID from User where First_Name = 'John' and Last_Name='Doe')

このような設計を使用すると、ユーザーが新しいレシピを追加するたびに、レシピとレシピ_成分表に行を追加するだけです。または、新しい材料が追加されたら、材料テーブルに行を追加します。

これは、 SQL 結合のチュートリアルへのリンクです。

于 2012-07-02T22:47:15.253 に答える