首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于每个表的许多未使用列的数据库设计注意事项都有相同的模式。

对于每个表的许多未使用列的数据库设计注意事项都有相同的模式。
EN

Stack Overflow用户
提问于 2016-07-23 12:53:05
回答 1查看 352关注 0票数 0

我是一个网页开发人员,所以我对数据库不太了解。我最近加入的公司有一个非常成熟的桌面ERP内置于.NET和Server,他们正在为巨大的企业客户提供服务,那里的设计运行良好。但他们没有开发任何基于网络的系统。但在那里,数据库设计是非常不寻常的。让我来解释一下,然后我会把我的问题发出来。

所以,现在我加入他们的行列,开发了一个基于web的ERP (网络桌面系统的复制品)。由于我是从零开始建立申请,他们给了我修改任何我认为会产生积极效果的东西的自由。

现在的设计是

  • 它们在数据库中有大约150个表。
  • 每个表都有相同的架构定义。
  • 他们把这些领域分为三类。
    • 字符串(因此它们在数据库中分配50个varchar(250个)字段)。
    • DateTime (因此他们在数据库中分配了15个小时间字段)。
    • 数字(因此他们在数据库中分配了30个Numeric()字段)。

  • 所有列都有名称(这些名称不会吓到开发人员,在一两周内他们就习惯了,甚至记住了许多字段关联):
    • 字符串(S1、S2、S3、S4等)。
    • DateTime (D1,D2,D3,D4等)。
    • 数字(N1,N2,N3,N4等)。

  • 就像我告诉过你的模式。每个表由95列组成。实际上,只有15-20列被使用。其余75-80列为空。
  • 这些表是的,规范化的索引是维护的。
  • 大多数表中的行数都小于1000。只有事务表记录涉及数十万。
  • 默认情况下,数值列的精度为(1,0)。当选择要使用的任何字段时,将根据要求调整精度。
  • 一个空数据库是~4MB。
  • 这种设计使那里的开发非常容易。因为他们有很多列,只要他们需要一个字段。他们只需选择数据类型,即字符串、数字或DateTime,然后分配下一个可用列。
  • 只有9-10个表有图像字段。

我认为这个信息已经足够了。现在我想问

  • 因为,我对SQL不太了解。这种设计是否适用于web环境(web,将从web客户端调用,也可以从移动环境调用)?
  • 因为,每个表都有75-80个空列。当事务记录将触及数百万时,它们是否会花费我们大量的内存?(考虑到应用程序是多租户)
  • 你对改进这个设计有什么建议?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-23 17:43:00

你有两个选择:

  1. 使用它,并接受它。
  2. 完全重新设计。

我推荐第一条,因为第二条很难,你的同事和老板会怀疑你的看法。与您的进展有关的任何问题都将归结为您疯狂的数据库设计。

您描述的数据库包含了典型的实体-值-属性设计错误。设计人员选择删除数据库对应用程序的所有意义,而不是在话语世界中以真实世界实体为模型定义表,而是使用DBMS来执行和推断它们之间的逻辑关系。应该在数据库中的实体是在内存中使用为S1等提供意义的应用程序逻辑构造的。从数据库的角度来看,这绝对是一场噩梦。

这也可以理解。EVA设计通常出现在很少有数据库专业知识的地方,以及问题域不太了解的地方。这就意味着“数据库中的任何东西都可以进入”,而EVA的设计将确实包含“任何东西”。在客户决定实际设计的范围内--即为每个数据库列提供独立的含义--应用程序充当一种DBMS代理。每个表都有大量未使用的列,这表明它们的使用可能是由客户决定的:客户可以“添加一列”,而应用程序则从未使用的堆中提取一列。不需要更改架构。是动态的!

整个行业都是基于这个想法。例如,所谓的“主数据管理”工具归结为EVA设计,客户在应用程序中设计数据库,应用程序以您描述的方式使用DBMS。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38542010

复制
相关文章

相似问题

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