什么时候应该将类似的数据分成不同的表格?

时间:2016-06-30 01:43:39

标签: database-design database-schema

我正在为我公司的数据库重新设计架构,该数据库包含各种投资产品的数据,我们跟踪共同基金,混合基金,单独账户等。目前,它的结构如下:

id | name      | class_code
-----------------------
1  | large cap | m
2  | small cap | c

使用它非常麻烦,因为有很多其他表与之相关,它存储有关产品的统计信息,并查询您需要知道大量特殊情况的信息(我写了很多400多行查询),并且在它之上没有参考键约束,因此数据不断需要被擦除。

我正在考虑制作一堆较小的表 - 每种投资类型一个,所以我有一个mutual_funds表,commingled_funds表等。问题是这些类别中有进一步的分类。有固定收益和股权型共同基金,每种基金都有不同类型的特征,我们存储和平衡具有固定收益和私募股权特征的基金。

我想知道我是否应该为每种产品类型制作一个表格,其中的列表示它是固定收益还是净资产如此

mutual_funds
id | name          | type
-----------------------
1  | large cap     | fixed
2  | small cap     | equity
3  | balanced core | balanced

comingled_funds
id | name      | type
-----------------------
1  | large cap | fixed
2  | small cap | equity

或者将其进一步分解为这样的表:

  • equity_mutual_funds
  • fixed_income_mutual_funds
  • balanced_mutual_funds
  • equity_commingled_funds
  • fixed_income_commingled_funds
  • balanced_commingled_funds
  • equity_seperate_accounts
  • fixed_income_seperate_accounts

这样做的好处是我能够在特征表上创建一个外键,每个特征表指向特定类型的产品,但缺点是我有大量重复的特征表(每个权益表)将具有与“equity_mutual_fund”fk或“equity_commingled_funds”fk相同的结构。

供参考,charactics表如下所示:

fixed_income_characteristics
product_id | z-score | median_mkt_cap
1          | 1.1412  | 14.12512
2          | 3.1241  | 511.1242

equity_characteristics
product_id | duration | quality
4          | 2.1241   | AA
5          | 1.1241   | BBB+

此外,我不能只做equity_fundsfixed_income_funds表,因为产品类型之间的区别对于复合材料和费用等产品的其他信息很重要。

我能弄清楚如何使用引用键约束来构建一个结构的唯一方法是将所有内容分解为单独的表,但这意味着我的模式在完成时将具有10k +表,并且看起来像需要维护的噩梦,因为如果我们想要开始跟踪新特性,我们需要在数百个表中添加新列。

有什么想法吗?或者任何有用的资源,当我遇到可能会有更多类似路障的地方时,该去哪儿去哪儿?

0 个答案:

没有答案
相关问题