有没有办法加载sqlite表而不知道表的名称?

时间:2012-07-02 22:09:38

标签: iphone objective-c xcode sqlite

我的应用程序允许用户将数据保存到sqlite文件。为了确保唯一的表名,我想在用户按下“保存”时创建一个具有(日期/时间)格式名称的表。有没有办法在我的sqlite文件中加载所有表而不明确说明所有表的名称?

我有一个sqlite文件中的食物列表。 sqlite文件包含有关其中每个食品的大量信息。用户可以通过浏览sqlite文件并将项添加到其列表来创建自己的配方。列表中的每个项目都由tableview中的单元格表示。配方完成后,我希望用户能够保存它,并让系统自动将此配方作为单元格添加到不同的表视图中。这样,当有人选择单元格时,在下一个表格视图中显示整个配方(不仅仅是作为单元格标题的配方名称)

1 个答案:

答案 0 :(得分:2)

我认为您没有正确使用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')

使用这样的设计,每当用户添加新配方时,您只需将行添加到配方和recipe_ingredients表中。或者,当他们添加新成分时,您会在成分表中添加一行。

以下是指向SQL joins tutorial的链接。

相关问题