【发布时间】:2012-06-08 09:33:57
【问题描述】:
我想设计一个用户/角色系统:
用户拥有名称和密码,然后用户可以拥有多个角色,例如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,
[name] [nvarchar](50) NULL,
CONSTRAINT [PK_Roles] PRIMARY KEY CLUSTERED ([id] ASC)
)
用户角色:
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.Id
如果是,为什么?
【问题讨论】:
-
是的! 当然你应该有外键。你为什么问?? FK 有助于确保数据一致性 - 如果没有 FK,您可以将任何类型的
id存储到您的user_roles表中 - 无需检查它们是否引用有效的用户和/或角色 - 这不是您想要的去做(而不是你以后想清理的事情!)
标签: sql-server