我想设计一个用户/角色系统:
用户有一个名称和密码,然后用户可以有几个角色,如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)
)
Run Code Online (Sandbox Code Playgroud)
角色:
CREATE TABLE [dbo].[Roles]
(
[id] [int] NOT NULL,
[name] [nvarchar](50) NULL,
CONSTRAINT [PK_Roles] PRIMARY KEY CLUSTERED ([id] ASC)
)
Run Code Online (Sandbox Code Playgroud)
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)
)
Run Code Online (Sandbox Code Playgroud)
我的问题是:我应该使用外键吗? User_Roles.User_id -> User.Id
如果是,为什么?
不太清楚你的意思,但......
User_Roles应该只有2列User_id,Role_idUser_Roles User_id 是一个外键 Users.idRole_id 是一个外键 Roles.id编辑:现在我明白了.是的,总是使用外键
也...
password是nvarchar(50),这意味着纯文本.这很糟糕.name值Users,你怎么知道哪个用户是哪个?主键创建后的注释后编辑...
CREATE TABLE [dbo].[User_Roles]
(
[User_id] [int] NOT NULL,
[Role_id] [int] NOT NULL,
CONSTRAINT [PK_User_Roles] PRIMARY KEY CLUSTERED ([User_id], [Role_id]),
CONSTRAINT [UQ_ReversePK] UNIQUE ([Role_id], [User_id])
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17561 次 |
| 最近记录: |