Java 数据库表中的特殊记录,如果更改,则应反映所有其他相关记录中的更改

Java 数据库表中的特殊记录,如果更改,则应反映所有其他相关记录中的更改,java,android,sql,sqlite,Java,Android,Sql,Sqlite,我有四个数据库表,一个表有两个感兴趣的字段,由用户在第一次下载-第一次运行时设置 用户设置其姓名和出生日期-处理后,我将此姓名和出生日期分配给其他表中的各种记录(在其他表中,只有两种可能,一种是记录与设置姓名和出生日期的所有者关联,另一种是用户可以使用其朋友的姓名和出生日期将记录与他的朋友关联)。现在我想给用户一个功能来编辑这个记录,这是他的名字和DOB。但是,编辑这一条记录还应触发关联的其他表中所有其他记录的更改。SQLite中是否内置了一些东西来实现这一点,或者我是否必须遍历所有表中的所有记

我有四个数据库表,一个表有两个感兴趣的字段,由用户在第一次下载-第一次运行时设置


用户设置其姓名和出生日期-处理后,我将此姓名和出生日期分配给其他表中的各种记录(在其他表中,只有两种可能,一种是记录与设置姓名和出生日期的所有者关联,另一种是用户可以使用其朋友的姓名和出生日期将记录与他的朋友关联)。现在我想给用户一个功能来编辑这个记录,这是他的名字和DOB。但是,编辑这一条记录还应触发关联的其他表中所有其他记录的更改。SQLite中是否内置了一些东西来实现这一点,或者我是否必须遍历所有表中的所有记录并手动更改它们

如果将用户名和DOB设置为这些其他表的外键,则还可以在外键中设置级联触发器。使用该外键创建表时,可以将“更新时”属性设置为“级联”,这将在将其设置为外键的任何其他条目中镜像用户信息中的更改


有关于该主题的详细信息。

如果您将用户名和DOB设置为这些其他表的外键,还可以在外键中设置级联触发器。使用该外键创建表时,可以将“更新时”属性设置为“级联”,这将在将其设置为外键的任何其他条目中镜像用户信息中的更改


有关于该主题的更多信息。

为什么不规范化表

您可以这样做:

 table USER:
 UserId(key), name, dateOfBirth

 table OTHER:
 fieldA, fieldB, fieldC, UserId (foreignKey)

这样,您就不必相应地更新其他表。根据您的使用场景,这可能是更好的方法(例如,在传统的事务设置中)。如果您从事数据仓库,。。。对表进行非规范化可能更好

为什么不对表进行规范化

您可以这样做:

 table USER:
 UserId(key), name, dateOfBirth

 table OTHER:
 fieldA, fieldB, fieldC, UserId (foreignKey)

这样,您就不必相应地更新其他表。根据您的使用场景,这可能是更好的方法(例如,在传统的事务设置中)。如果您从事数据仓库,。。。最好是对表进行非规范化

通常的方法是引入一个(对用户隐藏的)主键,一个自动递增计数器,并使用它来访问记录。用户ID之类的。然后,其他表通过UserID与用户相关


SQLite使用aka INTEGER主键(特定于SQLite)。

通常的方法是引入一个(对用户隐藏的)主键,一个自动递增计数器,并使用它访问记录。用户ID之类的。然后,其他表通过UserID与用户相关


SQLite使用aka INTEGER主键(特定于SQLite)。

不,我不是在重复列,我只是将姓名和日期与人们生活中的事件相关联,因此对于应用程序所有者生活中的事件,我会将其姓名添加到事件名称中,对于具有好友姓名的朋友,我也会将其姓名添加到事件名称中。不,我不是在重复列,我只是将名字和日期与人们生活中的事件联系起来,因此对于应用程序所有者生活中的事件,我将他的名字添加到事件名称中,对于有朋友名字的朋友也是如此。