我目前正在为我们团队的项目设计一个数据库结构。目前我有这个问题:是否可以将外键作为另一个表上的主键?外键可以作为主键吗?
下面是我们的一些系统的数据库设计的表:
user_accounts
students
guidance_counselors
我希望发生的是,user_accounts
表应包含的ID(所谓的登录凭证到系统)和密码学生用户和指导顾问用户。简而言之,students
和guidance_counselors
表的主键也是user_accounts
表的外键。但我不确定是否允许。
的另一个问题是:一个student_rec
表中也存在,这需要一个student_number
(这是在user_accounts
表user_id
)和guidance_counsellor_id
(这也是在user_accounts
的user_id
)它的每个记录的。如果学生和辅导员的ID都来自user_accounts table
,我如何设计student_rec
表?并且为了将来的参考,我如何手动将它写入SQL代码?
这一直在窃听我,我找不到任何具体或肯定的答案来解决我的问题。
虽然你的问题的答案是“是的,主键也可以作为外键”,我的建议是避免这种情况。使用离散主键和外键可以表达同样的关系,并且负担多重责任的列可能会造成困难。例如,如果主键也是标识列,或者通过ORM使用GuidComb策略自动分配,那么您可能会查看两个或更多个事务,而不是一个。单一责任原则也适用于数据库设计。 –