Sie Vorausgesetzt, verwenden MS SQL Server gibt es zwei Ansätze achive, was Sie suchen:
1) Trigger verwenden, wie von anderen Nutzern vorgeschlagen. Trigger wäre für INSERT/UPDATE, die die Datumsbereiche überprüfen und neue Werte hinzufügen oder Fehler erhöhen können.
2) Sie können zusammengesetzte Primärschlüssel in ItemTable verwenden:
CREATE TABLE [dbo].[ItemTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[HeaderRef] [int] NOT NULL,
[SLRef] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[HeaderRef] ASC,
[SLRef] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Nun wird dies eine Einschränkung setzen auf der ItemTable und SQL-Server nicht doppelte Kombination von headerRef und SLRef int-Werten (Tasten) ermöglichen.
Zurück Sie Ihre HeaderTable, können Sie die eindeutige Einschränkung setzen den Bereich der Start- und Enddaten auf HeaderTable für Start- und Enddaten
CREATE TABLE [dbo].[HeaderTable](
[ID] [int] IDENTITY(1,1) NOT NULL,
[STARTDATE] [datetime] not NULL,
[ENDDATE] [datetime] not NULL,
CONSTRAINT [PK_HeaderTable] 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]
GO
Erstellen Sie nun einen eindeutigen Index zu stoppen duplizieren.
/****** Object: Index [IX_HeaderTable] Script Date: 03/13/2017 12:24:51 ******/
CREATE UNIQUE NONCLUSTERED INDEX [IX_HeaderTable] ON [dbo].[HeaderTable]
(
[ENDDATE] ASC,
[STARTDATE] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
Sie können auch eine weitere Einschränkung auf HeaderTable setzen, die prüft, ob das Startdatum nicht vor dem Enddatum liegen kann.
ALTER TABLE [dbo].[HeaderTable] WITH CHECK ADD CONSTRAINT [CheckEndLaterThanStart] CHECK (([ENDDATE]>=[STARTDATE]))
GO
ALTER TABLE [dbo].[HeaderTable] CHECK CONSTRAINT [CheckEndLaterThanStart]
GO
Hoffe, das hilft!
Haben Sie versucht, Trigger einzufügen/zu aktualisieren? Du kannst einige schreiben. – pwas
Möchten Sie HeaderRef und SLRef in ItemTable eindeutig halten? –
Ja Ich möchte HeaderRef und SLRef im Datumsbereich, der zu Hedar hinzugefügt wurde, eindeutig halten. –