加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 在范例/子范例计划模式中实现具有互斥子类的子类

发布时间:2020-12-31 14:43:04 所属栏目:编程 来源:网络整理
导读:先容 为了使这个题目对将来的读者有效,我将行使通用数据模子来声名我面对的题目. 我们的数据模子由3个实体构成,它们应标志为A,B和C.为了简朴起见,它们的全部属性都是int范例. 实体A具有以部属性:D,E和X; 实体B具有以部属性:D,E和Y; 实体C具有以部属性:D和Z

>每个EntityType将拥有几多行(假设高于均匀增添率,至少看看将来5年)
>这些表(基范例和子范例)中的每一个在5年内会有几多GB?
>详细的数据范例是属性E.
>它只是一个属性,照旧有几个乃至几个属性
>您必要哪些查询必要E以及执行的频率
>您将必要哪些不必要E的查询以及执行的频率

我以为我倾向于默认将E保存在单独的子范例表中,由于它至少是“更干净”.我会思量将E移动到基范例表IF:大大都行不是用于C的EntityType;行数至少为数百万;而且我常常执行的查询必要E和/或从(D,E)上的索引受益的查询要么很是频仍地执行和/或必要足够的体系资源,以使索引镌汰整体资源操作率,或至少防备资源耗损的激增高出可接管的程度或一连足够长的时刻以导致太过阻塞和/或死锁增进.

UPDATE

O.P. commented on this answer:

My employers changed the business logic,removing E altogether!

这种变革出格重要,由于它正是我所猜测的也许产生在上面(第6个要点)的“在基类和A& B之间的中间表的归一化E”部门的“CONs”子部门中.详细题目是当这种变革产生时(而且它们老是云云)重构数据模子是何等轻易/坚苦.有些人会争冲突任何数据模子都可以重构/改变,以是从抱负开始.可是,固然在技能层面上确实可以重构任何对象,但环境的现实环境是局限题目.

资源不是无穷的,不只仅是CPU /磁盘/ RAM,尚有开拓资源:时刻和款子.企业不绝设定项目标优先级,由于这些资源很是有限.而且常常(至少在我的履历中),进步服从的项目(乃至体系机能以及更快的开拓/更少的错误)优先于增进成果的项目.固然这对我们技强职员来说是令人沮丧的,由于我们相识重构项目标恒久好处是什么,但技能性较差的营业职员更轻易看到新成果与新成果之间的直接相关,这只是营业的本质.收入.这可以归结为:“我们将在稍后返来办理这个题目”==“这个题目也许会在接下来的5 – 10年内呈现,由于我们险些总会有更重要的工作必要办理(具有嘲讽意味的是,如因为我们尚未修复它而不绝呈现的支持案例)“.

思量到这一点,假如数据的巨细足够小,以便可以举办很是查询的变动,和/或您有一个足够长的维护窗口,不只可以举办变动,还可以在产生变革时回滚错误,然后将E尺度化为基类表和A& A之间的中间表. B子类表可以事变(尽量这如故使您不必直接相识基类表中的特定范例(A或B)).可是,假如这些表中稀有亿行,而且有大量代码引用这些表(在举办变动时必需举办测试的代码),那么凡是比抱负主义更适用.这是我多年来不得不面临的情形:9.87亿行&基类表中的615 GB,漫衍在18个处事器上.这么多代码击中了这些表(基类和子类表),存在许多阻力 – 首要来自打点层,但偶然来自团队的其他成员 – 因为开拓量的巨细而举办任何变动必要分派的QA资源.

因此,再次,“最佳”要领只能逐个确定:您必要相识您的体系(即数据有几多,表格和代码怎样相干),怎样完成重构,以及职员您与之相助(您的团队和也许的打点层 – 您是否可以得到他们对此类项目标支持?).有一些变革,我一向在说起并打算1 – 2年,并采纳多次冲刺/宣布,以实现个中85%的实验.但假如你只有< 100万行,而不是许多代码绑定到这些表,那么你也许会开始更抱负/“纯粹”的工作. 请记着,无论您选择哪种方法,至少应该留意该模子在将来两年的事变方法(假如也许的话).留意什么起浸染,什么引起疼痛,纵然它看起来像其时最好的设法(这意味着你也必要让本身接管搞砸 – 我们都这样做 – 这样你就可以厚道地评估痛点).并留意为什么某些抉择有用或没有,以便您可以做出下次更有也许“更好”的决定:-).

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读