【发布时间】:2013-07-12 05:55:48
【问题描述】:
我目前正在为我们团队的项目设计一个数据库结构。我目前有这个问题:是否可以让外键充当另一个表的主键?
以下是我们系统数据库设计的一些表格:
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_id) user_accounts) 的每条记录。如果学生和辅导员的ID都来自user_accounts table,我将如何设计student_rec表?为了将来参考,我如何手动将其编写为 SQL 代码?
这一直困扰着我,我找不到任何具体或确定的答案来回答我的问题。
【问题讨论】:
-
虽然您的问题的答案是“是的,主键也可以充当外键”,但我的建议是避免这种情况。可以使用离散的主键和外键来表示相同的关系,并且重载具有多个职责的列可能会导致困难。例如,如果主键也是一个标识列,或者是通过 ORM 使用 GuidComb 策略自动分配的,那么您可能会查看两个或多个事务而不是一个。单一职责原则也适用于数据库设计。
标签: mysql sql database foreign-keys primary-key