sql - 糟糕的数据库模式设计的升级策略

标签 sql mysql database-design data-modeling

我出现在一份新工作中,发现数据库急需帮助。它有很多问题,包括

  • 没有外键……任何地方。它们是通过使用 int 并在代码中管理关系来伪造的。
  • 实际上每个字段都可以是NULL,但事实并非如此
  • 表和列的命名约定几乎不存在
  • Varchar 存储关系信息的串联字符串

人们可以争辩说,“它有效”,确实如此。但是向前看,用代码管理所有这些是一件很痛苦的事情,并且让我们容易受到 IMO 的 bug 的影响。基本上,数据库被用作平面文件,因为它没有做很多工作。

我想解决这个问题。我现在看到的问题是:

  1. 我们有很多数据(迁移,可能很棘手)
  2. 所有的数据库逻辑都在代码中(随着迁移而来的是大的代码变化)

我也很想做一些“激进”的事情,比如转向无模式的数据库。

面对基于设计不当的架构构建的现有数据库,有哪些好的策略?

最佳答案

强制外键:如果域中存在关系,则它应该有一个外键。

重命名现有的表/列充满了危险,尤其是在有许多系统直接访问数据库的情况下。陷阱包括仅定期运行的任务;这些经常被遗漏。

感兴趣:Scott Ambler 的文章:Introduction To Database Refactoring

Catalog of Database Refactorings

关于sql - 糟糕的数据库模式设计的升级策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1973281/

相关文章:

MySQL Tinybit(1) 通过 View 的列

php - 从远程 mysql 数据库检索图像到 android

mysql - 我应该有一张主装备表还是多张属性表?

mysql 确定查询的哪一部分最慢

database - 您将使用@OneToOne 关系的具体示例?

python - 如何为 SQLAlchemy 中的关系设置默认值?

mysql - Cakephp 的 SQL JOIN 查询

mysql - 指定数据类型的长度

sql - 帮助进行 SQL 查询

java - 创建 EntityManagerFactory 时,Hibernate 不断删除/创建表