2011-02-26 98 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