2011-02-26 99 views
-1

我们有一个投资咨询机构作为客户。他们向客户提供有关其客户投资的报告。我们正在为他们设计一个报告结构,但我不确定最佳的数据库设计是否适合客户所拥有的两种结构。最佳数据库设计

结构1:客户有一个退休基金,直接投资于共同基金/单位信托基金的组合。这些共同基金轮流投资于上市股票等证券。
结构2:客户有一个退休基金,投资于内部投资组合(基金)的组合,投资于共同基金(投资于证券)。

它自己很容易迎合结构1,也很容易适应结构2本身。但是有些客户会使用Structure 1和其他Structure 2,我不想为他们分别查询和报告。我想过的一个选择是为Structure 2设计,如果客户在Structure 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 
+0

您在一些普通视觉模型,这是很容易比你的MSSQL服务器DDL,以了解哪些用户不能够执行,因为他们可以使用MySQL,甲骨文...标签这是MS SQL Server随后没有最好现在你的数据库一个数据库设计。 – 2011-02-27 10:12:31

+0

好点Alex。有没有办法发布图片? – 2011-02-27 18:46:08

回答

1

它归结为业务规则,真的。

如果行为内部组合下显著不同的一组共同基金规则下运行,然后将它们存储在不同的表,并使用视图把它们结合起来进行报告。内部基金表和共同基金表都会有一个外键指向您的客户表。

如果它们大致相同,美国证券交易委员会的意见他们同样等等,然后我会用类似于制造组织将用于产品装配&子组件设计模式(搜索“物料清单数据模型“)或员工&的单一表设计模式(员工的ManagerID是其Manager的EmployeeID)。

+0

嗨菲尔,不知道什么是制造组织将用于产品组件和子组件? – 2011-02-27 18:45:27

+0

基本上,这将是一张存放公司股票,共同基金和“管理基金”的表格。 “托管”基金的记录将有多行指向他们各自的组件投资。现在我有更多时间去考虑它,它更类似于存储员工/经理数据(EmployeeID,EmployeeName,ManagerID)的单个表,其中ManagerID是该人员的EmployeeID。你必须调整模型来处理数量。要报告它,您可以在视图中递归地从表中选择。 SQL Server中的CTE非常方便。 – 2011-02-28 10:24:16