2013-04-13 2 views
0

Я пытаюсь моделировать сущности для резюме, и при этом я пришел к следующему вопросу: все, кроме последних удерживаемых позиций, имеют дату окончания.Как представить значение, которое не является нулевым, кроме одной строки?

Есть ли хороший способ ограничить не более одной строки, разрешенной как 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

Что делать, если человек в настоящее время работает для двух работодателей? – allyourcode

+0

это хороший момент, спасибо –

ответ

1

Вы можете установить дату, которая наверняка будет инвалидом один, как 31.12.9999 вместо NULL, а затем проверить его на стороне приложения. В противном случае вы можете установить логическое поле, чтобы показать, вышел ли человек из описанной позиции.

Я не думаю, что существует смысл в поддержании единственного значения NULL. Если вам это действительно нужно, создайте процедуру для проверки и вызовите ее перед каждой операцией вставки или обновления.

P.S. вы не рассматривали случай, когда у человека нет работы в то время, поэтому у всех позиций будет конечная дата.
P.P.S. почему вы держите месяц и год как два разных поля int? просто используйте date.

+0

спасибо за совет, это была помощь –

+0

@AaronAnodide, добро пожаловать. – svz

Смежные вопросы