我正在为一所学校设计一个 Web 应用程序。到目前为止,我坚持使用具有这些表的数据库:
用户
- ID
- 用户名
- 密码
轮廓
- user_id (FK)
- 姓名
- 姓
- 性别
- group_id (FK)
- (其他基本信息)
... 和其他不相关的表,如事件、委员会、组等。因此,users 表存储有关登录的基本信息,profiles 表存储有关用户的所有个人数据。
现在,profile 表中的 *group_id* 列有一个外键,它引用了groups表中用户当前注册的组的 ID 列。一个用户一次只能注册到一个组中,因此不需要任何额外的表格。
问题是,声明像group HAS MANY profiles这样的关系对我来说没有多大意义。相反,关系应该是group HAS MANY users,但是,我必须在users表上放一个 *group_id* 列,这并不适合,因为users表只存储身份验证信息。
另一方面,我想列出所有使用 ORM 在组中注册的用户并获取用户集合而不是配置文件。我的看法是,用户表就像“父”表,而配置文件表扩展了用户表。
为活动设置出勤率时也会出现同样的问题。我应该在 events_attendance 表中将配置文件作为外键引用吗?或者我应该参考用户 ID?
当然,这两种解决方案都可以实施和工作,但它们中的哪一个是最佳选择?
我挖了一点,发现这两种解决方案都符合3NF,所以理论上是正确的,但我很难以正确的方式设计我的数据库。