数据库设计:多类用户登录同一系统

时间:2012-01-04 04:21:20

标签: sql-server-2008 database-design class-design data-modeling

在我们的新系统中,我们有三种类型的人

  1. 业主
  2. 企业主助理
  3. 员工(熟练员工)
  4. 我有以下实体

    1. [商家] - 包含有关业主的详细信息
    2. [助理] - 有关助理的详细信息
    3. [员工] - 有关员工的详细信息
    4. 业务规则

      1. 对于给定的业务,只有一个业务所有者,这意味着业务所有者只能有一个登录。他就像是他的企业的超级用户。
      2. 企业主也可以是员工。
      3. 单个企业可以包含多个员工,每个员工都可以拥有不同类型的权利/权限。
      4. 每个企业只允许一名助手,业主可以配置权限/权限。
      5. 什么是正确的课堂设计和数据库设计?

        任何帮助/建议表示赞赏!!!

        更新1 :根据反馈,我提出了以下数据模型。我使用EF 4.1与代码优先方法,每个数据实体将直接映射到一个类。 Data model

        请建议您反馈!

3 个答案:

答案 0 :(得分:1)

你的问题很模糊,但对于多用户情况,我认为这在这里得到了很好的回答:Single Table Inheritance (Database Inheritance design options) pros and cons and in which case it used?

我还建议您查看数据库规范化,请参阅:http://en.wikipedia.org/wiki/Database_normalization

不幸的是,如果没有更多信息,我不能推荐更多。

答案 1 :(得分:1)

如果我理解正确,你有一些前端吗?这3种类型的人不直接访问数据库(登录数据库服务器)。我认为您需要将用户和关联角色存储在您的用户表中,并根据登录用户角色,您的前端Web /桌面应用程序需要约束操作。当业务所有者需要分配角色时,他将从角色表中选择人员和角色并对其进行映射。

这就是我设想的方式, 带有ID,传递,地址等的UserTable, 具有RoleID,RoleDescription,RoleName等的RolesTable, UserTable - RoleTable映射表

登录时,您的前端需要验证登录详细信息并从userTable - RoleTable映射表中获取相关角色。

答案 2 :(得分:1)

我发现你的班级设计存在一些问题。它不是您在Business Class中保留BusinessOwner信息的正确方法。我建议您使用以下系统设计 -

Abstract Class BusinessPeople

Class BusinessOwner extends BusinessPeople

Class Assistant extends BusinessPeople

Class Staff extends BusinessPeople

在您的商务舱中,您可以保留业务的详细信息。您可以使用上面的类设计来设计数据库。创建一个表名称Staff,必须将staff_id作为主键。然后为BusinessOwner,Assistant ...其他利益相关者创建表,每个表都有一个名为staff_id的属性,这是表Staff的主键,在这些(BusinessOwner,Assistant等)表中作为外键使用。