Duc*_*ran 87 database foreign-keys primary-key
我有表"User"(用户名,密码)和表"Profile"(profileId,性别,dateofbirth,...).目前我正在使用这种方法:每个Profile记录都有一个名为"userId"的字段作为外键,链接到User表.当用户注册时,将自动创建其配置文件记录.我对我朋友的建议感到困惑:将"userId"字段作为外键和主键并删除"profileId"字段.哪种方法更好?
Rob*_*vey 117
外键几乎总是"允许重复",这将使它们不适合作为主键.
相反,找到唯一标识表中每条记录的字段,或添加一个新字段(自动递增整数或GUID)作为主键.
唯一的例外是具有一对一关系的表,其中链表的外键和主键是同一个.
kot*_*zot 34
主键始终需要唯一,如果表是一对多关系,则外键需要允许非唯一值.如果表通过一对一关系而不是一对多关系连接,则使用外键作为主键是完全正确的.如果您希望相同的用户记录可能具有多个相关的配置文件记录,请使用单独的主键,否则请坚持使用您拥有的内容.
小智 5
是的,将主键作为外键是合法的。这是一种罕见的构造,但适用于:
1:1关系。由于不同的权限和特权仅适用于表级别,因此无法将两个表合并为一个表(从2017年开始,这样的数据库将很奇怪)。
1:0..1关系。配置文件可能存在或不存在,具体取决于用户类型。
性能是一个问题,设计是一个分区:与用户表相比,概要文件表很少被访问,位于单独的磁盘上或具有不同的分片策略。如果下划线存储是柱状的,则没有任何意义。
归档时间: |
|
查看次数: |
146531 次 |
最近记录: |