Android SQLite中的动态表

时间:2013-01-19 16:07:38

标签: android database sqlite

我的问题涉及数据库 - 场景是这样的:

我有一个应用程序可以跟踪人们何时借用物品。我有一张现有的桌子,可以追踪他们是谁,他们借了什么等等。我想要做的是创建一个单独的表来跟踪这个人借来的东西,他们的联系方式,他们是否退回等等。

我这样做的想法是在SQL中创建一个动态表来保存1个人的记录,即

约翰史密斯 DVD; 2012年7月12日;返回状况良好;等

我还在学习,我想知道是否:

这是可行的,可行的,或者如果有更聪明的方法可以实现它。

3 个答案:

答案 0 :(得分:0)

他们的联系信息可以链接到跟踪他们身份的表格中。

如果你还没有为退货创建一个表,那么我建议你引用借用表的ID并在借用表中设置一个标志来说明这个项已被退回。

我不太清楚为什么要创建一个新表来整理所有信息。如果您想要获取所有信息,那么我建议在准备语句时使用SQL keywrod JOIN。如果您确实希望稍后将信息存储在表中,则可以在数据库中重复这些信息。

您可以执行的有关不同类型联接的教程:http://www.w3schools.com/sql/sql_join.asp

答案 1 :(得分:0)

绝对有可能按照你的描述去做。不过,这真的不是一个很好的策略。您的新表完全等同于现有表中的一个附加列,该列将该行标记为属于特定个人。

答案 2 :(得分:0)

您的回答取决于您的情况;

如果你只对“谁”借用“什么”(当前)而不是“何时”感兴趣,除了最后一次出现,而你假设总是只有一个项目的副本,那么你可以使用一个一个关系:

CREATE TABLE Person
(
    PersonId        int IDENTITY(1,1)   NOT NULL,
    Name            nvarchar(30)        NOT NULL,
    Surname         nvarchar(30)        NOT NULL,
    BorrowItemId    int                 NULL FOREIGN KEY REFERENCES Item UNIQUE,
    BorrowDate      datetime            NULL,
    ReturnDate      datetime            NULL,
    ReturnCondition nvarchar(50)        NULL,
    CONSTRAINT PK_Person PRIMARY KEY CLUSTERED (PersonId ASC),
)
CREATE TABLE Item
(
    ItemId          int IDENTITY(1,1)   NOT NULL,
    ItemDescription nvarchar(50)        NOT NULL,
    CONSTRAINT [PK_Item] PRIMARY KEY CLUSTERED (ItemId ASC)
)

如果您有每个项目的多个副本,则应删除 BorrowItemId 上的 UNIQUE 键,将关系更改为一对多。如果是;

要查看借用并返回的人员信息项目:

SELECT PersonId, Name, Surname, ItemDescription, ReturnDate, ReturnCondition
FROM Person INNER JOIN Item
    ON BorrowItemId = ItemId
WHERE BorrowItemId IS NOT NULL 
    AND ReturnDate IS NOT NULL

您可以在WHERE子句中添加PersonId过滤器以查询特定人员

这不是一个好设计,因为您可以插入没有日期信息的记录,或者您甚至可以拥有包含日期​​信息但没有相关BorrowItemId的记录。我建议每次使用新项目时,使用多对多并保留历史数据(可以很方便)或使用更新覆盖