我正在设计包含以下各列的用户注册表。
CREATE TABLE [dbo].[NCT_UserRegistration]
(
[User_Id] [int] IDENTITY(1,1) NOT NULL,
[User_EmailId] [varchar](255) NULL,
[User_Password] [varchar](512) NULL,
[User_Name] [varchar](255) NULL,
[User_MobileNum] [varchar](20) NULL,
[User_Status] [varchar](15) NULL,
[User_Role] [varchar](20) NULL,
[User_CreatedDate] [timestamp] NULL,
[User_UpdatedDate] [datetime] NULL,
[Name] [varchar](30) NULL
)
我对身份和角色的要求如下。
status VARCHAR(15)
索引,ENABLED、DISABLED 枚举。role VARCHAR(20)
SUPER_ADMIN 和 PROJECT_ADMIN 枚举
我从上面了解到的是状态应该只采用Enabled
或Disabled
并且角色也一样。如何设计我的表以确保它只采用这两个值?还有什么办法,例如如果我提供 1 则表示启用,提供 0 表示禁用。
我可以在这里得到一些想法吗?任何帮助,将不胜感激。谢谢
最佳答案
您需要使用CHECK CONSTRAINT限制为特定值
CREATE TABLE [dbo].[NCT_UserRegistration](
[User_Id] [int] IDENTITY(1,1) NOT NULL,
[User_EmailId] [varchar](255) NULL,
[User_Password] [varchar](512) NULL,
[User_Name] [varchar](255) NULL,
[User_MobileNum] [varchar](20) NULL,
[User_Status] [varchar](15) NULL CONSTRAINT chk_Status CHECK ([User_Status] IN ('ENABLED', 'DISABLED')),
[User_Role] [varchar](20) NULL CONSTRAINT chk_Role CHECK ([User_Role] IN ('SUPER_ADMIN','DISABLED')),
[User_CreatedDate] [timestamp] NULL,
[User_UpdatedDate] [datetime] NULL,
[Name] [varchar](30) NULL
)
对于枚举,您必须在前端处理或从表中检索值时进行处理,这是一个额外的步骤。
SELECT CASE WHEN [User_Status] = 1 THEN 'ENABLED' WHEN [User_Status] = 0 THEN 'DISABLED' END As UserStratus
FROM [dbo].[NCT_UserRegistration]
关于sql - 如何为 SQL 表列分配 2 个默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42082367/