我在SQL Server 2005中设计我的数据库表并遇到了一个小的设计/体系结构问题......我有我的主Users
表(username, password, lastlogin,
等),但我也需要存储2个不同的用户配置文件,即存储的配置文件数据在两者之间是不同的。我已将所有常用用户数据放入Users
表中。
我是否为Consumers
和Marketers
创建单独的表格?如果是,那么这些表中的主键是否[table-name]_UserID
与Users_UserID
上的1:1关系?
基本上,注册后,用户可以选择注册为消费者或营销商。当用户登录时,将查询Users
表,并从任一表中查询其随附的配置文件。
我知道这种方法很混乱,这就是为什么我来这里询问如何实现这一目标的最佳方式。
谢谢!
编辑:此外,在Users
表格中,我有一个Users_UserType
标记,可让我在用户登录时区分用户,从而了解哪些要查询的个人资料表。
答案 0 :(得分:-1)
你的直觉是正确的。您想要normalize您的数据。使用单独的表可以减少数据重复或空/空列。
不幸的是,如果有这样的反向关系,你就不会有一个很好的干净的外键,从User到Consumer或Marketer,因为它可能是一张桌子或另一张桌子。
您可能希望将User_Id从Consumer / Marketers表映射回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