Comment implémenter l'intégrité référentielle ici?

J'ai obtenu la structure suivante – ce que j'admets n'est pas idéal, mais tellement de choses sont construites là-dessus, je veux minimiser les changements.
Je ne suis pas sûr de savoir comment implémenter correctement l' intégrité référentielle entre les documents et les adresses de livraison . Peut-il être fait ici sans utiliser de triggersurs? Le problème est que l'adresseNum peut parfois être nulle dans les documents.

CREATE TABLE [dbo].[Clients]( [IdClient] [varchar](10) NOT NULL, [Nom] [varchar](40) NULL CONSTRAINT PK_Clients PRIMARY KEY (IdClient)) GO CREATE TABLE [dbo].[ClientsDelivAdr]( [IdClient] [varchar](10) NOT NULL, [AdrNum] [tinyint] NOT NULL, [Adresse] [varchar](200) NULL CONSTRAINT [PK_ClientsAdrLivr] PRIMARY KEY (IdClient, AdrNum)) CREATE TABLE [dbo].[Documents]( [DocID] [int] IDENTITY(1,1) NOT NULL, [NoDoc] [char](9) NULL, [IdClient] [varchar](10) NULL, [AdrNum] [tinyint] NULL, [DateDoc] [smalldatetime] NOT NULL, CONSTRAINT [PK_DocID] PRIMARY KEY (DocId)) 

Certains clients ont plusieurs adresses de livraison, d'autres n'en ont pas.
Les données ressemblent à ceci:

 Clients Id Name Address --- ---- ------- AA ClientA addressA BB ClientB qddressB CC ClientC addressC DeliveryAdresses Client Adr Address ------ --- ------- AA 1 shop1 AA 2 shop2 CC 1 shopx Documents DocId Client Addr OrderDate ------- ------ ---- -------- 1001 CC 1 5/5/2013 1002 AA 1 5/5/2013 1003 BB (Null) 5/5/2013 

Je pense que vous pouvez simplement utiliser des foreign keys comme vous le souhaitez:

 CREATE TABLE [dbo].[Documents]( [DocID] [int] IDENTITY(1,1) NOT NULL, [NoDoc] [char](9) NULL, [IdClient] [varchar](10) NULL, [AdrNum] [tinyint] NULL, [DateDoc] [smalldatetime] NOT NULL, CONSTRAINT [PK_DocID] PRIMARY KEY (DocId), CONSTRAINT FK_DOC_Clients FOREIGN KEY (IdClient) references Clients (IdClient), CONSTRAINT FK_Doc_Addresses FOREIGN KEY (IdClient,AdrNum) references DeliveryAddresses (IdClient,AdrNum) ) 

Si une ou plusieurs valeurs de colonne dans le côté de reference d'une key étrangère est NULL , la contrainte de key étrangère n'est pas vérifiée. Inversement, il n'y a aucun moyen d'avoir NULL être une reference de key étrangère.