最佳数据库设计
我们有一个投资咨询机构作为客户。他们向客户提供有关其客户投资的报告。我们正在为他们设计一个报告结构,但我不确定最佳的数据库设计是否适合客户所拥有的两种结构。最佳数据库设计
结构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
它归结为业务规则,真的。
如果行为内部组合下显著不同的一组共同基金规则下运行,然后将它们存储在不同的表,并使用视图把它们结合起来进行报告。内部基金表和共同基金表都会有一个外键指向您的客户表。
如果它们大致相同,美国证券交易委员会的意见他们同样等等,然后我会用类似于制造组织将用于产品装配&子组件设计模式(搜索“物料清单数据模型“)或员工&的单一表设计模式(员工的ManagerID是其Manager的EmployeeID)。
嗨菲尔,不知道什么是制造组织将用于产品组件和子组件? – 2011-02-27 18:45:27
基本上,这将是一张存放公司股票,共同基金和“管理基金”的表格。 “托管”基金的记录将有多行指向他们各自的组件投资。现在我有更多时间去考虑它,它更类似于存储员工/经理数据(EmployeeID,EmployeeName,ManagerID)的单个表,其中ManagerID是该人员的EmployeeID。你必须调整模型来处理数量。要报告它,您可以在视图中递归地从表中选择。 SQL Server中的CTE非常方便。 – 2011-02-28 10:24:16
您在一些普通视觉模型,这是很容易比你的MSSQL服务器DDL,以了解哪些用户不能够执行,因为他们可以使用MySQL,甲骨文...标签这是MS SQL Server随后没有最好现在你的数据库一个数据库设计。 – 2011-02-27 10:12:31
好点Alex。有没有办法发布图片? – 2011-02-27 18:46:08