【问题标题】:Database Relationship Model for a blood bank with many user types具有多种用户类型的血库的数据库关系模型
【发布时间】: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


【解决方案1】:
  1. 使用Party Model 和Party Role 模型。个人或组织(如公司)从抽象的法律方继承。一个政党可以扮演许多角色,例如捐赠者、员工。

  2. 我将使用支持真实用户和组以及可更新视图的数据库,而不是滚动您自己的用户和组登录名,WITH CHECK OPTION。

【讨论】:

    猜你喜欢
    • 2015-02-27
    • 2011-10-17
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2021-07-01
    • 1970-01-01
    相关资源
    最近更新 更多