在工作中,正在查看一个由三列组成的表:
行的总数很小(少于100)。如果没有上下文ID,则当前将上下文ID设置为0。上下文ID是可选的。
主键是(行ID,上下文ID)
在这种情况下,提出了两种选择:
保持原样
将表分为两个表。当上下文ID为0(行ID,值)时,一张表;当上下文ID为值(行ID,上下文ID,值)时,一张表。
如果有很多行,那么我同意拆分表的决定。如果行数很少,则将表划分似乎有点过头了。
我会很感兴趣在这种情况下人们会推荐什么?总是将单个表分成两个表更好吗?
谢谢,
-拉里
首先,如果这是实体属性值反模式,请避免这种情况。该答案的其余部分假定不是。
在确定是否要对通用对象(单个表)或特定对象(两个表)进行建模时,需要考虑代码是否能够通用处理或需要特殊情况。
是否需要特殊情况?
您的代码将对ContextId给予特殊对待吗0?例如,您可以运行一个selectWHERE ContextId=0
然后继续以通用方式查看不同的上下文吗?您是否只有特殊的逻辑ContextId=0
?您是否需要在代码中使用一个特殊的常量来表示此contextId?这个常数会出现在某些if
语句中吗?
如果对这些问题的回答通常为是,则创建单独的表。如果将它们放在不同的表中,则不会从中得到好处。
我猜这是基于您的问题的情况。
还是全部通用?
如果将ContextId零与整个代码中的所有其他上下文ID一样对待,则必须将其与其他代码放在同一张表中。
权衡
如果事情不是那么明确,则您需要做出权衡的决定。您将需要根据此信息的使用量是通用的还是特定的来进行此操作。我会偏向于创建两个表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句