【发布时间】:2013-09-06 00:16:25
【问题描述】:
我们这里有一家假公司,一家血库。核心思想是只有献血者可以献血,但不能登录系统。但是,代表公司的“注册用户”(user 表中的行)可以登录系统并查看其公司捐献的血量。捐助者必须与公司有联系。在少数情况下,“注册用户”也可以献血。
- 用户 = 一个“注册用户”。可以登录了。
- 捐赠者 = 无法登录。
- Admin = 站点管理员。可以登录了。
- 血库员工 = 不言自明。可以登录。
未来可能会有其他类型的用户,比如区分“注册用户”的类型。也许,只是也许。
解决方案 1
- 单独的供体表。
优点:
- 查找捐赠者的查询会更快,尤其是在表格变大时
缺点:
- 捐赠者突然想登录怎么办?在
user表中创建重复条目? - 如果“注册用户”想捐款怎么办?在
donor表中创建重复条目?
解决方案 2
使用 ACL role/user_role 表来定义捐助者(和其他用户类型)
优点:
- 易于处理希望稍后以“注册用户”身份登录的捐赠者
- 易于处理以后想成为捐赠者的“注册用户”
- 也更容易将任何用户提升为管理员
缺点:
- 有些字段捐助者不需要,例如“密码”、“节流”,所以 会有额外的 NULLs
解决方案 3
与解决方案 2 相同,除了创建一个额外的表 user_type。这样做是为了避免重复使用 ACL 系统来控制登录和用户帐户类型的详细信息。
解决方案 4
聚合用户。
这是基于 user1759572 使用聚合用户的建议。我可能没有完全正确地建模它。
你会选择哪个选项?有第四个……第五个选项……更好的选择吗?
非常感谢任何回复。这将帮助我确定我几天来一直在反复考虑的最后一点设计。精氨酸。谢谢你!
【问题讨论】:
-
你寻找最好的方式还是务实的方式?
-
我希望它们是一样的。可能是最好的方法,或者至少不违反我可能忽略的任何明显的设计最佳实践
-
您能在这里解释一下您的域逻辑吗?从我看到的 1 开始,只有公司管理捐赠者和他们的血液?是的?这是现在的要求吗?
-
另一种方法是将 USERS 表聚合到其他实体并具有类似
Company [1-*] Donor, Company [1-1] User, Donor [1-1] User, User [1-*] ACL rules -
请通过编辑而非 cmets 进行澄清。请use text, not images/links, for text--including tables & ERDs. 转述或引用其他文本。仅将图像用于无法表达为文本或增强文本的内容。无法搜索或剪切和粘贴图像。在图像中包含图例/键和说明。让您的帖子自成一体。
标签: sql database database-design relational-database database-schema