首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在增加新功能时扩大列的数量是正常和良好的做法吗?

在增加新功能时扩大列的数量是正常和良好的做法吗?
EN

Software Engineering用户
提问于 2021-10-18 13:03:10
回答 2查看 164关注 0票数 -1

在一个数据分析平台维护和开发(旧式)项目中,有一个名为is的表,其中有40+列,其中大约10列是层次结构的列。由于新特性的开发,层次结构还需要额外的10个级别,例如level11、level12、.,项目经理决定在现有的表A中增加20个新列。

层次数据类似于按国家和部门划分的收入描述:例如,

-level1的价值:USA 100 | JAPAN 200 | UK 300

-level2的价值:USA SOFTWARE 50 | USA HARDWARE 50 | OTHERS JAPAN 50 | ...

-level3的价值:SOFTWARE A 10 | SOFTWARE B 10 ... | HARDWARE A 100 | HARDWARE B 200 ...

每个级别的值是其父级别值的细分,没有冗余。所以它是标准化的,不是吗?

作为一名开发人员,我直觉地感到在现有的表中添加20个新列(已经有40+列)会让我感到不舒服。但是,当考虑使用40+列的当前表时,我无法用足够的理由反对在现有表A中增加20个新列的想法。

问题:在已有的40+列的表中添加这么多列是非常正常的做法吗?这种方法的优缺点是什么?

EN

回答 2

Software Engineering用户

发布于 2021-10-18 20:34:48

据我所知,您一直遵循您的项目经理已经强加了一段时间的模式,做出这一决定可能有很有价值的原因,您是否尝试过问他为什么他们的DB管理设计会那样工作呢?老实说,我不认为用这种方式组织表格有什么意义,但同样,您的DBA同事可能会向您回答这个问题(我希望您能够与我们分享这个答案,为了相互了解,毕竟这就是这个社区的全部内容,如果涉及机密数据,您不需要这样做)。

在处理数据库时,我建议创建不同的表,每个表都有自己的用途,并由外键关联,但是如果您需要插入更多的列(因为在某些特定情况下,这种关系可能很难设计和处理),除了可读性之外,我不认为扩展这些表有什么实际的问题,这个问题是在更新现有列的属性时开始的,与任何编程语言一样,一个好的项目应该是可扩展的,但是它的属性不需要通过这种扩展来改变。

票数 1
EN

Software Engineering用户

发布于 2021-10-19 08:37:07

列的数量是可以的。有时候你只是有很多专栏。但值得关注的是,你有很多相同的专栏。你实际上没有不同的数据,比如名字,姓氏,街道号码,街道名称,邮政编码,出生日期,雇佣日期,.-你所拥有的更像是名字1,名字2,名字3,名字4,名字5,名字6,名字7,.

在这种情况下(名与行之间的多对一关系),您应该创建一个FirstName表,该表的每个行都包含一个名,以及与其关联的行的ID。

如果一个单独的表的开销是不可接受的,并且您不需要在查询中使用名称,并且您不希望一行中有大量的名字,那么您可以使用一个FirstNames列来存储所有的名称,比如JSON。然后将整个名称集合作为一个值来处理,所以如果您有一个非常大的数字,它可能会很昂贵,而且数据库引擎不能有效地索引单个值,但是如果您不需要这些值,它也可以。

选项0(坏的原因是您的名字最多):

代码语言:javascript
复制
+------------------------------------------------------------------------------+
| TeamID | GoatsTeleported | FirstName1 | FirstName2 | FirstName3 | FirstName4 |
+------------------------------------------------------------------------------+
|      0 |              47 |      Alice |        Bob |      Carol |       Dave |
|      1 |            6542 |        Eve |      Frank |      Grace |      Heidi |
+------------------------------------------------------------------------------+

备选案文1(最灵活,增加另一表):

代码语言:javascript
复制
+--------------------------+
| TeamID | GoatsTeleported |
+--------------------------+
|      0 |              47 |
|      1 |            6542 |
+--------------------------+

+--------------------+
| TeamID | FirstName |
+--------------------+
|      0 |     Alice |
|      0 |       Bob |
|      0 |     Carol |
|      0 |      Dave |
|      1 |       Eve |
|      1 |     Frank |
|      1 |     Grace |
|      1 |     Heidi |
+--------------------+

选项2:(没有额外的表,但不能根据名字查询)

代码语言:javascript
复制
+------------------------------------------------------------+
| TeamID | GoatsTeleported |                      FirstNames |
+------------------------------------------------------------+
|      0 |              47 |  ["Alice","Bob","Carol","Dave"] |
|      1 |            6542 | ["Eve","Frank","Grace","Heidi"] |
+------------------------------------------------------------+
票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/432782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档