you may need to provide a multi path tiered approach below is my table settings for taxonomy. It is different from your criteria, as you have to choose one before the others, but it may give you some ideas. hth
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TaxonomyEntityType]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[TaxonomyEntityType](
[ID] [bigint] NOT NULL,
[EntityType] [varchar](50) NULL,
CONSTRAINT [PK_TaxonomyEntityType] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TaxonomyClassification]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[TaxonomyClassification](
[TaxonomyTypeID] [varchar](5) NOT NULL,
[ID] [varchar](5) NOT NULL,
[Description] [varchar](50) NULL,
[EntityTypeID] [bigint] NULL,
CONSTRAINT [PK_TaxonomyClassification] PRIMARY KEY CLUSTERED
(
[ID] ASC,
[TaxonomyTypeID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Doctors]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Doctors](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[DisplayName] [varchar](210) NULL,
[FirstName] [varchar](50) NULL,
[LastName] [varchar](50) NULL,
[MiddleName] [varchar](50) NULL,
[Credentials] [varchar](50) NULL,
[GroupID] [bigint] NOT NULL CONSTRAINT [DF_Doctors_GroupID] DEFAULT ((1)),
[Active] [bit] NOT NULL CONSTRAINT [DF_Doctors_Active] DEFAULT ((1)),
[AddDate] [datetime] NULL,
[AddUserID] [varchar](50) NULL,
[ChangeDate] [datetime] NULL,
[ChangeUserID] [varchar](50) NULL,
CONSTRAINT [PK_Doctors] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TaxonomyType]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[TaxonomyType](
[ID] [varchar](5) NOT NULL,
[Description] [varchar](50) NULL,
[EntityTypeID] [bigint] NULL,
CONSTRAINT [PK_TaxonomyType] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
IF NOT EXISTS (SELECT * FROM ::fn_listextendedproperty(N'MS_Description' , N'SCHEMA',N'dbo', N'TABLE',N'TaxonomyType', N'COLUMN',N'ID'))
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Keane Taxonomy Type Code' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TaxonomyType', @level2type=N'COLUMN',@level2name=N'ID'
GO
IF NOT EXISTS (SELECT * FROM ::fn_listextendedproperty(N'MS_Description' , N'SCHEMA',N'dbo', N'TABLE',N'TaxonomyType', N'COLUMN',N'Description'))
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Taxonomy Description' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TaxonomyType', @level2type=N'COLUMN',@level2name=N'Description'
GO
IF NOT EXISTS (SELECT * FROM ::fn_listextendedproperty(N'MS_Description' , N'SCHEMA',N'dbo', N'TABLE',N'TaxonomyType', N'COLUMN',N'EntityTypeID'))
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Entity Type(person or non person)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'TaxonomyType', @level2type=N'COLUMN',@level2name=N'EntityTypeID'
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TaxonomySpecialization]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[TaxonomySpecialization](
[TaxonomyTypeID] [varchar](5) NOT NULL,
[TaxonomyClassificationID] [varchar](5) NOT NULL,
[ID] [varchar](5) NOT NULL,
[Description] [varchar](50) NULL,
[EntityTypeID] [bigint] NULL,
[EducationRequired] [bit] NULL,
CONSTRAINT [PK_TaxonomySpecialization] PRIMARY KEY CLUSTERED
(
[TaxonomyTypeID] ASC,
[TaxonomyClassificationID] ASC,
[ID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_TaxonomyClassification_TaxonomyEntityType]') AND parent_object_id = OBJECT_ID(N'[dbo].[TaxonomyClassification]'))
ALTER TABLE [dbo].[TaxonomyClassification] WITH CHECK ADD CONSTRAINT [FK_TaxonomyClassification_TaxonomyEntityType] FOREIGN KEY([EntityTypeID])
REFERENCES [dbo].[TaxonomyEntityType] ([ID])
GO
ALTER TABLE [dbo].[TaxonomyClassification] CHECK CONSTRAINT [FK_TaxonomyClassification_TaxonomyEntityType]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_TaxonomyClassification_TaxonomyType]') AND parent_object_id = OBJECT_ID(N'[dbo].[TaxonomyClassification]'))
ALTER TABLE [dbo].[TaxonomyClassification] WITH CHECK ADD CONSTRAINT [FK_TaxonomyClassification_TaxonomyType] FOREIGN KEY([TaxonomyTypeID])
REFERENCES [dbo].[TaxonomyType] ([ID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[TaxonomyClassification] CHECK CONSTRAINT [FK_TaxonomyClassification_TaxonomyType]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Doctors_DoctorGroups]') AND parent_object_id = OBJECT_ID(N'[dbo].[Doctors]'))
ALTER TABLE [dbo].[Doctors] WITH CHECK ADD CONSTRAINT [FK_Doctors_DoctorGroups] FOREIGN KEY([GroupID])
REFERENCES [dbo].[DoctorGroups] ([ID])
GO
ALTER TABLE [dbo].[Doctors] CHECK CONSTRAINT [FK_Doctors_DoctorGroups]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_TaxonomyType_TaxonomyEntityType]') AND parent_object_id = OBJECT_ID(N'[dbo].[TaxonomyType]'))
ALTER TABLE [dbo].[TaxonomyType] WITH CHECK ADD CONSTRAINT [FK_TaxonomyType_TaxonomyEntityType] FOREIGN KEY([EntityTypeID])
REFERENCES [dbo].[TaxonomyEntityType] ([ID])
GO
ALTER TABLE [dbo].[TaxonomyType] CHECK CONSTRAINT [FK_TaxonomyType_TaxonomyEntityType]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_TaxonomySpecialization_TaxonomyClassification]') AND parent_object_id = OBJECT_ID(N'[dbo].[TaxonomySpecialization]'))
ALTER TABLE [dbo].[TaxonomySpecialization] WITH CHECK ADD CONSTRAINT [FK_TaxonomySpecialization_TaxonomyClassification] FOREIGN KEY([TaxonomyClassificationID], [TaxonomyTypeID])
REFERENCES [dbo].[TaxonomyClassification] ([ID], [TaxonomyTypeID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[TaxonomySpecialization] CHECK CONSTRAINT [FK_TaxonomySpecialization_TaxonomyClassification]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_TaxonomySpecialization_TaxonomyEntityType]') AND parent_object_id = OBJECT_ID(N'[dbo].[TaxonomySpecialization]'))
ALTER TABLE [dbo].[TaxonomySpecialization] WITH CHECK ADD CONSTRAINT [FK_TaxonomySpecialization_TaxonomyEntityType] FOREIGN KEY([EntityTypeID])
REFERENCES [dbo].[TaxonomyEntityType] ([ID])
GO
ALTER TABLE [dbo].[TaxonomySpecialization] CHECK CONSTRAINT [FK_TaxonomySpecialization_TaxonomyEntityType]