Database design 对不带外键约束的表的引用
我有一个数据库和一个编辑数据库的应用程序 我有一个名为ADDRESS(ID、STREETID、NUMBER)的地址表 我有一个名为street的街道名称表(ID、STREETNAME、CREATIONUSERID) 我还有一个名为USER(ID、用户名、密码)的用户表 “我的街道”表中的街道名称已填充。 该表被用户用作查找表 要在我的应用程序中的某个位置输入地址(field address.STREETID), 但有时用户必须进入一条新街道 这将被插入街道以供进一步使用。 当用户向我的表中添加街道时,我希望能够 跟踪添加的用户 现在我想有两种选择: 第一:创建一个假用户,其中默认街道为 将引用,然后创建外键约束 (STREET.creationserid,它引用USER.ID)用于创建的新街道 第二:不创建外键约束,将CreationSerid保留为空 用于街道的默认街道,并仅为新的 创建街道以跟踪添加每个街道的用户Database design 对不带外键约束的表的引用,database-design,foreign-keys,relationship,Database Design,Foreign Keys,Relationship,我有一个数据库和一个编辑数据库的应用程序 我有一个名为ADDRESS(ID、STREETID、NUMBER)的地址表 我有一个名为street的街道名称表(ID、STREETNAME、CREATIONUSERID) 我还有一个名为USER(ID、用户名、密码)的用户表 “我的街道”表中的街道名称已填充。 该表被用户用作查找表 要在我的应用程序中的某个位置输入地址(field address.STREETID), 但有时用户必须进入一条新街道 这将被插入街道以供进一步使用。 当用户向我的表中添加街
哪一个更好,为什么?当系统中的某个用户不再是用户时,您打算怎么做,然后必须从用户表中删除该用户?最好使用外键。它将强制执行引用完整性
我还有一个字段USER.STATUS,它是用户状态的标志。如果必须删除用户,我会将其设置为“已删除”。通过这种方式,我保留了该用户的历史记录,同时将其设置为活动状态。感谢您的链接。读了它,我刚意识到外键可以有空值,所以这将是我最好的解决方案。我将为CreationSerid创建一个外键约束,同时将其设置为“可空”