我正在尝试为简历的实体建模,并且这样做我遇到了以下问题:除了最近持有的职位之外的所有职位都有结束日期。
是否有一种很好的方法来限制最多允许为null的一行。事件更好的是单个允许的null也有最新的开始日期。
另一种说法是你可以指定一个约束,说“除非”,否则为“
”注意:这是我正在进行的一项学习练习(而不是处理生产代码)。 这是我正在使用的脚本表:
CREATE TABLE [dbo].[Employers](
[Id] [uniqueidentifier] NOT NULL,
[City] [nvarchar](max) NULL,
[State] [nvarchar](max) NULL,
[StartMonth] [int] NULL,
[StartYear] [int] NOT NULL,
[EndMonth] [int] NULL,
[EndYear] [int] NULL,
[Name] [nvarchar](max) NULL,
[Label] [nvarchar](max) NULL,
[Resume_Id] [uniqueidentifier] NULL,
[UserProfile_UserId] [int] NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[Employers] WITH CHECK ADD CONSTRAINT [Resume_Employers] FOREIGN KEY([Resume_Id])
REFERENCES [dbo].[Resumes] ([Id])
GO
ALTER TABLE [dbo].[Employers] CHECK CONSTRAINT [Resume_Employers]
GO
ALTER TABLE [dbo].[Employers] WITH CHECK ADD CONSTRAINT [UserProfile_Employers] FOREIGN KEY([UserProfile_UserId])
REFERENCES [dbo].[UserProfile] ([UserId])
GO
ALTER TABLE [dbo].[Employers] CHECK CONSTRAINT [UserProfile_Employers]
GO
答案 0 :(得分:1)
您可以设置一个肯定是无效的日期,例如31.12.9999而不是NULL
,然后在应用端进行检查。否则,您可以设置一个布尔字段来显示某人是否已退出所描述的位置。
我认为保留单个NULL
值没有多大意义。如果你确实需要它,那么创建一个程序来检查它并在每次插入或更新操作之前调用它。
P.S。当一个人当时没有工作时你没有考虑这个案例,所以所有职位都有一个结束日期
P.P.S.为什么你把月份和年份保持为两个不同的int
字段?只需使用date
。