您会为这两个表引入sql表继承开销吗?

时间:2012-06-24 08:58:33

标签: sql sql-server inheritance aggregation single-table-inheritance

您是否会为TemplateTeststep和TestplanTeststep表引入表继承?

TestplanTeststep将始终一个TemplateTeststep的只读副本(红色)加上一些可编辑的字段(紫色)。

TemplateTeststep将包含永远不会出现在TestplanTeststep表中的单个字段。 TestplanTeststep将有单独的字段,永远不会出现在 TemplateTeststep表。

此外,TestplanTeststep表中有一些来自TemplateTeststep表的字段是只读的。 (没有人应该改变它们,因为它们需要对报告/调查等安全......)

enter image description here

TemplateTeststep仍然包含ModifiedBy和ModifiedAt字段,这些字段不会出现在TestplanTeststep上,用于更改内容/时间的历史跟踪。

2 个答案:

答案 0 :(得分:0)

这实际上取决于使用环境。

速度是一个大问题吗?如果对这些数据进行大量读取,则将两个表中的单个逻辑实体的值拆分会增加读取延迟。在低吞吐量系统中,这可以忽略不计,但是如果你有数亿行,那么这就会增加。

限制数据集的大小比读取访问性能更重要吗?对数据进行非规范化通常会使它们更快地读取(它们只存储在一个连续的空间中,而不是在磁盘的不同扇区上)并减少所需的锁定量,但会增加存储整个数据集的空间量。

您使用的是ORM解决方案,还是会手动加入各个表格?前者可能会使数据分裂变得微不足道,而后者可能更容易出错。

我认为这里没有正确或错误的答案;我倾向于使用其余代码库/组织其他部分中使用的任何方法。

对于它的价值,可能使用多表继承,因为我倾向于使用Java的Hibernate进行ORM。

答案 1 :(得分:0)

  1. 您应该在TestPlanTestStep Foreign Key中拥有Table

  2. 要跟随Primary-Foreign的TemplateTestStep和TestPlanTestStep的Relation-ShipSecond form of Normalization

  3. Design就像De-Normalization一样,好像有人需要报告一样。如果不是这样,请删除Duplicate列以避免redundancy中的Database