하나의 솔루션이 DefaultTaskValue
열을 제거하고 다른 DefaultTaskvalues
테이블을 작성합니다. 이렇게하면 모든 열을 NOT NULL
으로 설정하고 계단식 효과를 원하는대로 설정할 수 있습니다.
ProjectTasks
테이블 :
CREATE TABLE [dbo].[ProjectTasks]
(
[TaskID] [int] IDENTITY(1,1) NOT NULL,
...
--- removed: DefaultTaskValue] [int] NULL
)
ALTER TABLE [dbo].[ProjectTasks]
ADD CONSTRAINT [PK_ProjectTasks]
PRIMARY KEY CLUSTERED
(
[TaskID] ASC
)
GO
TaskValues
테이블 :
CREATE TABLE [dbo].[TaskValues]
(
[TaskID] [int] NOT NULL,
[Value] [int] NOT NULL,
...
)
ALTER TABLE [dbo].[TaskValues]
ADD CONSTRAINT [PK_TaskValues]
PRIMARY KEY CLUSTERED
(
[TaskID] ASC,
[Value] ASC
)
ALTER TABLE [dbo].[TaskValues]
ADD CONSTRAINT [FK_TaskValues_ProjectTasks]
FOREIGN KEY([TaskID])
REFERENCES [dbo].[ProjectTasks] ([TaskID])
GO
DefaultTaskValues
테이블 :
CREATE TABLE [dbo].[DefaultTaskValues]
(
[TaskID] [int] NOT NULL,
[Value] [int] NOT NULL,
...
)
ALTER TABLE [dbo].[DefaultTaskValues]
ADD CONSTRAINT [PK_DefaultTaskValues]
PRIMARY KEY CLUSTERED
(
[TaskID] ASC
)
ALTER TABLE [dbo].[DefaultTaskValues]
ADD CONSTRAINT [FK_DefaultTaskValues_TaskValues]
FOREIGN KEY([TaskID], [Value])
REFERENCES [dbo].[TaskValues] ([TaskID], [Value])
GO
하나의 가능성은'이 ON CASCADE' 당신의 외래 키 제약 조건에 추가 삭제하는 것입니다, 하지만 이로 인해 잠재적으로 엄청난 양의 레코드 삭제가 발생할 수 있습니다. 두 테이블. –
- 실용적이지는 않습니다. 또한 ProjectTasks에 대한 삽입/업데이트 트리거 이후에 고려됩니다 (삽입은 항상 DefaultValue에 대해 NULL로 이동해야하며 업데이트가 확인됩니다). – kpollock
'DefaultTaskValue' 컬럼을 제거하고 또 다른'DefaultTaskvalue' 테이블을 생성해야합니다. 이렇게하면 모든 열을 'NOT NULL'로 설정할 수 있습니다. –