我想设计一个用户/角色系统:
用户具有名称和密码,然后用户可以拥有多个角色,如Admin.
为此,我创建了一个这样的架构:
用户:
CREATE TABLE [dbo].[Users] ( [id] [int] NOT NULL,[name] [nvarchar](50) NULL,[password] [nvarchar](50) NULL,CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ([id] ASC) )
角色:
CREATE TABLE [dbo].[Roles] ( [id] [int] NOT NULL,CONSTRAINT [PK_Roles] PRIMARY KEY CLUSTERED ([id] ASC) )
user_roles:
CREATE TABLE [dbo].[User_Roles] ( [id] [int] NOT NULL,[User_id] [int] NOT NULL,[Role_id] [int] NOT NULL,CONSTRAINT [PK_User_Roles] PRIMARY KEY CLUSTERED ([id] ASC) )
我的问题是:我应该使用外键User_Roles.User_id – >用户名
如果是,为什么?
解决方法
不太清楚你的意思,但……
> User_Roles应该只有2列User_id和Role_id
这两者都构成了主键
>您不需要额外的id列User_Roles
> User_id是Users.id的外键
> Role_id是Roles.id的外键
编辑:现在我明白了.是的,always use foreign keys
也…
>如果密码是nvarchar(50),这意味着纯文本. This is bad.
>如果您在“用户”中有重复的名称值,您如何知道哪个用户是哪个?特别是如果他们有相同的密码(这将发生因为我们的meatsacks是愚蠢的)
主键创建后的注释后编辑…
CREATE TABLE [dbo].[User_Roles] ( [User_id] [int] NOT NULL,CONSTRAINT [PK_User_Roles] PRIMARY KEY CLUSTERED ([User_id],[Role_id]),CONSTRAINT [UQ_ReversePK] UNIQUE ([Role_id],[User_id]) )
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。