【发布时间】:2013-07-12 07:06:37
【问题描述】:
我正在为一所学校设计一个网络应用程序。到目前为止,我坚持使用具有这些表的数据库:
用户
- 身份证
- 用户名
- 密码
个人资料
- user_id (FK)
- 姓名
- 姓氏
- 性
- group_id (FK)
- (其他基本信息)
... 和其他现在不相关的表,如事件、委员会、组等。 因此,users 表存储有关登录的基本信息,profiles 表存储有关用户的所有个人数据。
现在,配置文件表中的 *group_id* 列有一个外键,它引用 groups 表中用户当前注册的组的 ID 列。一个用户一次只能注册到一个组中,因此不需要任何额外的表格。
问题是,声明像 group 这样的关系有很多 profiles 对我来说没有多大意义。相反,关系应该是 group HAS MANY users,但是,我必须在 users 表上放置一个 *group_id* 列,这并不适合,因为 users 表只存储身份验证信息。
另一方面,我想列出使用 ORM 注册到组中的所有用户,并获取用户集合而不是个人资料。我的看法是,用户表就像“父”表,而配置文件表扩展了用户表。
在为活动设置出席人数时也会出现同样的问题。我应该在 events_attendance 表中将配置文件作为外键引用吗?还是应该引用用户 ID?
当然,这两种解决方案都可以实施和工作,但哪一个是最佳选择?
我挖了一点,发现这两种解决方案都符合3NF,所以理论上是正确的,但我很难以正确的方式设计我的数据库。
【问题讨论】:
-
你想塑造什么样的群体?像安全授权组?还是这家伙在象棋社?
标签: sql database normalization database-relations