我已经阅读了很多超类型/子类型线程,我很确定我不会问同一个。
我的数据库中有以下表格。请注意:
1.某些安全类型只需要Type但不需要SubType,例如股票和债券
2. Securties.TypeId是指向Type.ID的外键。
3. Securties.SubTypeId与BondType或DerivativeType表没有外键关系。目前,数据完整性由C#代码维护。
由于缺少外键关系是不好的,我想重构这个DB来拥有它。鉴于此DB已经投入生产,在限制软件风险的同时改进它的最佳方法是什么?也就是说,一种方法是将所有XXXType表组合成一个表并重新排列所有SubTypeId,但显然需要更新Securites表中的大量记录。所以它被认为是一种风险更大的方法,而不是另一种不需要改变价值的方法。
[Securites]
ID Name TypeId SubTypeId
1 Stock1 2 NULL
2 Fund1 3 NULL
3 Bond1 1 3
4 Deriv1 4 3
[Type]
ID Name
1 Bond
2 Stock
3 ETF
4 Derivative
[BondType]
ID Name
...
2 GovermentBond
3 CorporateBond
4 MunicipalBond
...
[DerivativeType]
ID Name
...
2 Future
3 Option
4 Swap
...