définir la valeur null dans une colonne de clé étrangère?

J'ai cette table

CREATE TABLE [dbo].[CityMaster](
    [CityID] [int] NOT NULL,
    [City] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [BranchId] [varchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [DF__CityM__Branc__74444068]  DEFAULT ((0)),
    [ExternalBranchId] [varchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
 CONSTRAINT [PK_CityMaster] PRIMARY KEY CLUSTERED 
(
    [City] ASC,
    [BranchId] ASC
),
 CONSTRAINT [uk_citymaster_cityid_branchid] UNIQUE NONCLUSTERED 
(
    [CityID] ASC,
    [BranchId] ASC
)
)

et une autre table

CREATE TABLE [dbo].[CustomerMaster](
    [ID] [int] NOT NULL,
    [CustomerCode] [varchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [CustomerName] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [CustomerAddress] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [CustomerPhone] [varchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [CustomerEmailId] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [CustomerPriority] [int] NOT NULL CONSTRAINT [DF_CustomerMaster_CustomerPriority]  DEFAULT ((0)),
    [CustomerRegisterDate] [datetime] NULL,
    [CustomerIsActive] [bit] NULL CONSTRAINT [DF_CustomerMaster_CustomerIsActive]  DEFAULT ((1)),
    [BranchId] [varchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL CONSTRAINT [DF__CustomerM__Branc__67DE6983]  DEFAULT ((0)),
    [CityId] [int] NULL CONSTRAINT [DF_CustomerMaster_CityId]  DEFAULT ((0)),
 CONSTRAINT [PK_CustomerMaster] PRIMARY KEY CLUSTERED 
(
    [CustomerCode] ASC,
    [BranchId] ASC
)
) ON [PRIMARY]

ALTER TABLE [dbo].[CustomerMaster]  WITH CHECK ADD  CONSTRAINT [fk_cdCityId_CityId] FOREIGN KEY([CityId], [BranchId])
REFERENCES [dbo].[CityMaster] ([CityID], [BranchId])

ALTER TABLE [dbo].[CustomerMaster] CHECK CONSTRAINT [fk_cdCityId_CityId]

Comme vous pouvez le voir, il y a une clé étrangère sur CityId, BranchId. Le problème que j'ai est, si un utilisateur n'est pas entre dans sa ville (il peut choisir de ne pas, ce champ n'est pas obligatoire, alors la CityId serait vide et lorsque j'essaie d'insérer cette valeur dans la CustomerMaster table, je reçois ce message d'erreur indiquant que

L'instruction INSERT en conflit avec la contrainte de CLÉ ÉTRANGÈRE "fk_cdCityId_CityId". Le conflit est survenu dans la base de données "TestDatabase", table "dbo.CityMaster".
La déclaration a été résilié.

Donc, je veux savoir un moyen de contourner cela. - Je savoir si un d'unique ou d'une colonne de clé primaire est référencé en tant que clé étrangère, il ne peut pas être null. Mais, quel est le temps, quand j'ai mis
on delete set null? Dans ce cas, si cette ligne est supprimée de CityMaster il serait mis à null dans CustomerMaster (je veux dire de toutes ses références). donc, si c'est possible pourquoi et comment puis-je définir la valeur de cette clé étrangère null manuellement?
Et si ce n'est pas possible par tout moyen, quel est le meilleur moyen d'éviter la situation que j'ai décrite?

source d'informationauteur Razort4x