CREATE TABLE Address ( -- Address has Address Id, AddressId int IDENTITY NOT NULL, -- maybe Address is in Legislative District and Legislative District has District Number, LegislativeDistrictNumber int NULL, -- maybe Address is in Legislative District and Legislative District is for State Or Province and State Or Province has State Or Province Id, LegislativeDistrictStateOrProvinceId int NULL, -- maybe Address is assigned Postal Code, PostalCode int NULL, -- maybe Address is in State Or Province and State Or Province has State Or Province Id, StateOrProvinceId int NULL, PRIMARY KEY(AddressId) ) GO CREATE TABLE Politician ( -- maybe Politician represents Legislative District and Legislative District has District Number, LegislativeDistrictNumber int NULL, -- maybe Politician represents Legislative District and Legislative District is for State Or Province and State Or Province has State Or Province Id, LegislativeDistrictStateOrProvinceId int NULL, -- Politician has Politician Id, PoliticianId int IDENTITY NOT NULL, PRIMARY KEY(PoliticianId) ) GO CREATE VIEW dbo.Politician_LegislativeDistrictNumberLegislativeDistrictStateOrProvinceId (LegislativeDistrictNumber, LegislativeDistrictStateOrProvinceId) WITH SCHEMABINDING AS SELECT LegislativeDistrictNumber, LegislativeDistrictStateOrProvinceId FROM dbo.Politician WHERE LegislativeDistrictNumber IS NOT NULL AND LegislativeDistrictStateOrProvinceId IS NOT NULL GO CREATE UNIQUE CLUSTERED INDEX IX_PoliticianByLegislativeDistrictNumberLegislativeDistrictStateOrProvinceId ON dbo.Politician_LegislativeDistrictNumberLegislativeDistrictStateOrProvinceId(LegislativeDistrictNumber, LegislativeDistrictStateOrProvinceId) GO CREATE TABLE StateOrProvince ( -- State Or Province has State Or Province Id, StateOrProvinceId int IDENTITY NOT NULL, PRIMARY KEY(StateOrProvinceId) ) GO ALTER TABLE Address ADD FOREIGN KEY (StateOrProvinceId) REFERENCES StateOrProvince (StateOrProvinceId) GO