设为首页 - 加入收藏 华夏网 ()- 云主机,资讯,互联网,人工智能,云计算,大赢家论坛,区块链,VR,站长网!
热搜: 系统 芯片 什么 市场
当前位置: 主页 > 水果奶奶论坛 > 正文

sql-server – 如何在SQL Server数据库中设计用户/角色架构?

发布时间:2021-04-02 00:48 所属栏目:[水果奶奶论坛] 来源:网络整理
导读:我想设计一个用户/角色系统: 用户具有名称和密码,然后用户可以拥有多个角色,如Admin. 为此,我创建了一个这样的架构: 用户: CREATE TABLE [dbo].[Users]( [id] [int] NOT NULL,[name] [nvarchar](50) NULL,[password] [nvarchar](50) NULL,CONSTRAINT [PK_U

我想设计一个用户/角色系统:

用户具有名称和密码,然后用户可以拥有多个角色,如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])
)

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章