mysql - 如何评价数据库系统中一张表的好坏?

标签 mysql database oracle data-modeling data-analysis

如何评价数据库系统中一张表的好坏?我们需要从哪些方面来分析呢?我可以建立一个模型来进行此类评估吗?如果是的话怎么办?

最佳答案

非详尽列表。对于所有这些问题,是一个好的答案,是不好的答案。

  1. 该表格是否具有明确的业务功能?它与应用程序的目的的契合程度如何?
  2. 该表的名称是否正确?表的列名称是否正确?业务用户能理解他们的意思吗?
  3. 表有主键吗?
  4. 表是否对所有业务(候选)键都有唯一约束?
  5. 所有外键都已定义吗?
  6. 所有具有约束值的列是否都有指向引用数据表的外键或检查约束(或 MySQL 的 enum)?
  7. 所有列都具有正确(最强)的数据类型吗?
  8. 表格是否正确标准化? (在 OLTP 环境中,这意味着至少 Boyce-Codd Normal Form ,而数据仓库中的情况则有所不同。)
  9. 该表是否不含任何包含“智能 key ”的列、CSV 字符串、JSON、XML、其含义取决于另一列(或另一表)中保存的元数据的不同数据项,或任何其他看似奇怪的结构这在当时是个好主意,但会在多年后导致可怕的代码和数据损坏?
  10. 所有列都是标量,使用公认的 Oracle 内置数据类型(即没有嵌套表或用户定义类型)吗?
  11. 物理数据模型图是否包含表格?
  12. 该表是否可以从逻辑数据模型图中的实体派生?
  13. 您有表及其依赖对象的 DDL 脚本吗?这些脚本在源代码管理中吗?
  14. 该表是否符合您拥有的任何建模和编码标准(如果有)?
  15. 表的物理实现是否正确(例如,所有必要的索引、索引组织(如果适用)、分区(如果适用))?
  16. 这张 table 能守住吗?您是否愿意向另一位经验丰富的数据建模者、数据库开发人员或业务用户解释它?
<小时/>

正如您所知,这是一个固执己见的列表(这就是为什么有些人投票结束您的问题)。有些观点相当不精确。这可能与您希望的模型相去甚远。

人们可能会对其中一些措施提出异议。例如,关于 JSON 等非原子数据结构的观点。当然,有时这种结构是合适的。我曾经开发过一个系统,如果我们将数据存储在 XMLtype 列中而不是将其分解到关系表中,那么该系统会简单得多。但这些都是孤立的案例。阅读本网站上的一些有关智能 key 、标记 CSV 字符串或针对实体-属性-值反模型编写查询的问题,以了解这些事情会造成多大的痛苦。 First Normal Form应该是一个给定的条件,而藐视它的开发人员不值得拥有数据库。

其他点是领头羊。如果您的组织没有维护最新的物理数据模型,那么很可能您的所有表(如果不是全部的话)都是坏的(不是不可避免的,只是有可能)。令人惊讶的是,有多少地方似乎没有将其 DDL 脚本置于源代码控制之下。他们如何管理测试和生产的部署?我认为祈祷很重要。

关于mysql - 如何评价数据库系统中一张表的好坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50264281/

相关文章:

mysql - mysql_stmt_store_result 一次只返回一条记录

php - 将 MySQL 数据库值分配给 PHP 变量

database - SQL Server - 使用带交集的计数函数

oracle - 使用动态插入插入数据时在 Oracle 中获取 ORA-01747 : invalid user. table.column、table.column 或列规范

javascript - 严格比较在生产环境中未产生预期结果,但在本地服务器上运行良好

c# - 如何获取刚刚插入的记录的 pkey 值(自动增量)?

database - Oracle:删除子表时删除父表(双向级联删除)

oracle - ORA-12154 : TNS:could not resolve the connect identifier specified

mysql - SOAPUI Groovy 解析 XML 响应并将其插入 mysql 数据库

MySQL数据库表