我有四个数据库表一个表有两个感兴趣的字段,由用户在首次下载时设置 - 首次运行。
用户设置他的姓名和出生日期 - 处理后我将此名称和DOB分配给其他表中的各种记录(在其他表中,只有两种可能性,记录与设置名称的所有者和DOB相关联或者用户可以使用他的朋友姓名和DOB将记录与他的朋友关联起来。现在我想给用户一个功能来编辑这个记录,这是他的名字和DOB。但是,编辑此一条记录还应触发其他相关表中的所有其他记录的更改。在SQLite中是否有内容可以实现这一点,还是我必须遍历所有表中的所有记录并手动更改它们?
答案 0 :(得分:2)
为什么不规范表格?
你可以这样做:
table USER:
UserId(key), name, dateOfBirth
table OTHER:
fieldA, fieldB, fieldC, UserId (foreignKey)
这样您就不必相应地更新其他表。根据您的使用情况,这可能是更好的方法(例如,在传统的交易设置中)。如果您处于数据仓库中,那么对表进行非规范化可能会更好
答案 1 :(得分:1)
如果您将用户的名称和DOB设置为其他表的外键,则还可以在外键中设置级联触发器。使用该外键创建表时,可以将ON UPDATE属性设置为cascade,这将使用户信息中的更改反映在将其设置为外键的任何其他条目中。
https://www.sqlite.org/foreignkeys.html有关于该主题的更多信息。
答案 2 :(得分:1)
通常的方法是引入(隐藏到用户)主键,自动增量计数器,并使用它来访问记录。 UserID等。然后,其他表通过UserID与用户相关。
SQLite使用ROWID aka INTEGER PRIMARY KEY(特定于SQLite)。