【问题标题】:SQL Server table with different user profiles具有不同用户配置文件的 SQL Server 表
【发布时间】:2011-07-30 00:17:55
【问题描述】:

我正在 SQL Server 2005 中设计我的数据库表,并且遇到了一个小的设计/体系结构问题...我有我的主要 Users 表(username, password, lastlogin, 等),但我还需要存储 2 个不同的用户配置文件,即存储的配置文件数据将在两者之间有所不同。我已将所有常见用户数据放入Users 表中。

我是否为ConsumersMarketers 创建单独的表?如果是这样,这些表中的主键是否应该是 [table-name]_UserID,并且与 Users_UserID 上的关系为 1:1?

基本上,在注册后,用户可以选择注册为消费者或营销商。当用户登录时,将查询Users 表,并从任一表中查询其随附的个人资料。

我知道这种方法很麻烦,这就是为什么我来这里询问如何才能最好地实现这一点。

谢谢!

编辑:此外,在Users 表中,我有一个Users_UserType 标志,可以让我在用户登录时区分用户,从而知道哪个个人资料表 em> 进行查询。

【问题讨论】:

    标签: sql-server-2005 database-design architecture


    【解决方案1】:

    你的直觉是正确的。你想normalize你的数据。使用单独的表可以减少数据重复或空/空列。

    不幸的是,对于这样的反向关系,您不会有一个从用户到消费者或营销人员的干净的外键,因为它可能是一个表或另一个表。

    您可能希望将来自 Consumer/Marketers 表的 User_Id 映射回 User。

    您可以使用左连接在单个查询中查询它:

    Select 
         u.*,
         c.*,
         m.*
         From Users u
            left join Consumers c on c.User_Id = u.ID
            left join Marketers m on m.User_Id = u.ID
         Where
            u.ID = @UserId
    

    【讨论】:

    • 谢谢!是的,我绝对必须确保我的表格是标准化的。但是从设计的角度来看,您是否同意我的方法应该是:TABLE1 = Users with User_ID as PK; TABLE2 = Consumers User_ID 作为Users_UserID 上的PK FK; TABLE3 = Marketers User_ID 作为Users_UserID 上的PK FK
    • 或者我应该省略 FK 参考吗?但是,这意味着没有参照完整性。
    • @maGz:你所描述的方法绝对不是不寻常的。我想说,这是执行 1:1 关系的典型方式(在这种情况下实际上是 1:0…1)。
    • @Andriy,感谢您确认。我不确定为什么我对这种方法犹豫不决。您能否帮我确认一下...如果我有另一个名为 Callouts 的表将 Marketers_UserID 引用为 FK,则引用的父表应该是 Marketers_UsersID 而不是 Users_UserID,对吗?
    • @maGz:现在那个可能会比较少见。至少,我没有定义/维护这种依赖链的实际经验。我只能确认,如果我遇到类似的问题,我会积极思考这个方向。根据项目的复杂性,我可能还会向那些有过这种真实经历的人寻求更多关于该分数的建议。
    猜你喜欢
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多