具有不同用户配置文件的 SQL Server 表
我正在 SQL Server 2005 中设计我的数据库表,并遇到了一个小的设计/架构问题...我有我的主 Users
表(用户名、密码、lastlogin、
等),但我还需要存储2个不同的用户配置文件,即存储的配置文件数据在两者之间会有所不同。我已将所有常见用户数据放入 Users
表中。
我是否为消费者
和营销人员
创建单独的表?如果是这样,这些表中的主键是否应该为 [table-name]_UserID
并与 Users_UserID
建立 1:1 关系?
基本上,注册后,用户将可以选择注册为消费者或营销商。当用户登录时,将查询Users
表,并从任一表中查询其随附的个人资料。
我知道这种方法很混乱,这就是为什么我来这里询问如何最好地实现这一点。
谢谢!
编辑:此外,在Users
表中,我有一个Users_UserType
标志,它允许我在登录时区分用户,从而知道哪些用户要查询的配置文件表。
I am designing my db tables in SQL Server 2005 and have come across a small design/architecture issue... I have my main Users
table (username, password, lastlogin,
etc.), but I also need to store 2 different user profiles, i.e. the profile data stored will be different between the two. I've put all the common user data into the Users
table.
Do I create separate tables for Consumers
and Marketers
? And if so, should the primary key in these tables be [table-name]_UserID
with a 1:1 relationship on Users_UserID
?
Basically, upon registering, the user will be given the choice to register as a Consumer or Marketer. When a user logs in, the Users
table will be queried, and their accompanying profile will be queried from either table.
I know this approach is messy, which is why I've come here to ask how best this can be achieved.
Thanks!
EDIT: Additionally, in the Users
table I have a Users_UserType
flag that will allow me to distinguish between users when they log in, hence knowing which Profile Table to query.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你的直觉是正确的。您想要标准化您的数据。使用单独的表可以减少数据重复或空/空列。
不幸的是,对于这样的反向关系,您将不会有一个从用户到消费者或营销人员的干净的外键,因为它可能是一个表或另一个表。
不过,您可能希望将 Consumer/Marketers 表中的 User_Id 映射回 User。
您可以使用左连接在单个查询中查询它:
Your gut feeling is correct. You want to normalize your data. Using separate tables reduces data duplication, or empty/null columns.
Unfortunantly, with a reverse relationship like this, you won't have a nice clean foreign key from User to Consumer or Marketer because it could be one table or another.
You would want to map a User_Id from the Consumer/Marketers table back to User though.
You could query it in a single query using left joins: