У нас есть инвестиционная консультативная организация в качестве клиента. Они предоставляют отчеты об инвестициях своих клиентов. Мы разрабатываем для них структуру отчетности, однако я не уверен в оптимальном дизайне базы данных, который учитывает две структуры, которые есть у их клиентов.
Структура 1: Клиент имеет пенсионный фонд, который напрямую инвестирует в паевые инвестиционные фонды / паевые целевые фонды. Эти взаимные фонды, в свою очередь, инвестируют в ценные бумаги, такие как котирующиеся на бирже акции.
Структура 2: Клиент имеет пенсионный фонд, который инвестирует в комбинацию внутренних портфелей (фондов), которые, в свою очередь, инвестируют в паевые инвестиционные фонды (которые инвестируют в ценные бумаги).
Очень легко обслуживать структуру 1, а также просто обслуживать структуру 2. Однако некоторые клиенты будут использовать структуру 1, а другие - структуру 2, и я не хочу, чтобы у них были отдельные запросы и отчеты для них. Один из вариантов, о котором я подумал, - это разработать для Структуры 2, и если клиент находится в Структуре 1, включить «фиктивный» внутренний портфель. Например, в приведенном ниже примере Пенсионный фонд 1 структурирован в соответствии со структурой 1, а Пенсионный фонд 3 структурирован в соответствии со структурой 2 с использованием фиктивного внутреннего портфеля. Смотрите представления vw_Structure1 и vw_Structure2.
Я ищу лучший способ сделать это. Есть идеи?
PS: Кажется, проблема с публикацией DDL, поэтому оставит остаток как новое сообщение
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [2-InternalPortfolio](
[InternalPortfolioID] [int] IDENTITY(1,1) NOT NULL,
[InternalPortfolioName] [varchar](50) NOT NULL,
CONSTRAINT [PK_2-InternalPortfolio] PRIMARY KEY CLUSTERED
(
[InternalPortfolioID] 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
SET IDENTITY_INSERT [2-InternalPortfolio] ON
INSERT [2-InternalPortfolio] ([InternalPortfolioID], [InternalPortfolioName]) VALUES (1, N'High Growth')
INSERT [2-InternalPortfolio] ([InternalPortfolioID], [InternalPortfolioName]) VALUES (2, N'Conservative')
INSERT [2-InternalPortfolio] ([InternalPortfolioID], [InternalPortfolioName]) VALUES (3, N'Dummy Internal Portfolio')
SET IDENTITY_INSERT [2-InternalPortfolio] OFF
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [Security](
[SecurityID] [int] IDENTITY(1,1) NOT NULL,
[SecurityName] [varchar](50) NOT NULL,
CONSTRAINT [PK_Security] PRIMARY KEY CLUSTERED
(
[SecurityID] 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
SET IDENTITY_INSERT [Security] ON
INSERT [Security] ([SecurityID], [SecurityName]) VALUES (1, N'Company 1')
INSERT [Security] ([SecurityID], [SecurityName]) VALUES (2, N'Company 2')
INSERT [Security] ([SecurityID], [SecurityName]) VALUES (3, N'Company 3')
INSERT [Security] ([SecurityID], [SecurityName]) VALUES (4, N'Company 4')
SET IDENTITY_INSERT [Security] OFF
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO