问题标签 [refactoring-databases]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
442 浏览

database - Oracle中有类似“列符号链接”的东西吗?

我想暂时通过两个列名访问我的数据库中的一列。

为什么?列名选择不当,我想重构它。因为我希望我的 webapp 在更改列名时保持稳定,所以最好

  1. 有一个(我们称之为)名为better_column_name的符号链接指向列bad_column_name
  2. 将 web 应用程序更改为使用better_column_name
  3. 删除符号链接并将列重命名为better_column_name

“重构数据库”建议实际添加第二列,该列在提交时同步以实现此目的。我只是希望 Oracle 有一种更简单的方法,工作量更少,开销也更少。

0 投票
1 回答
434 浏览

sql - 使用 linq to excel 和实体框架重新设计数据库然后重新加载方法

所以我有一些包含大量数据的表。假设它们是表 A、B 和 C。我想为这些表中的每一个添加自动增量 ID 字段,通过在表之间交换一些字段来规范化它们并添加一个额外的表 D。Gulp。有三个目标:1)重新设计数据库,重新加载现有数据。2) 启用从电子表格加载数据以添加/编辑/删除四个表。3)启用Web前端添加/编辑/删除四个表。

我目前的做法:

  • 我想我会将 3 个现有表中所有数据的平面文件导出到 csv(电子表格)中。
  • 然后重构数据库设计结构
  • 然后使用 linq to excel 将 csv 电子表格记录读回 dto 对象
  • 然后使用实体框架将那些 dto 对象转换为实体,以使用表之间的适当关系更新数据库
  • 电子表格将重新用于未来的批量数据添加/编辑/删除

下面这些工具呢?SSIS 批量插入存储过程

我是否过于复杂了?有没有更好的办法?

0 投票
3 回答
1166 浏览

sql-server - 重构许多数据库表中的重命名字段

我面临重命名一个字段,其中相同的字段名在许多表中复制。

寻找将遍历所有表的脚本或免费/低成本工具,如果 fieldA 存在,则将其重命名为 fieldB。

谢谢

0 投票
1 回答
92 浏览

sql - 在 Sql Server 中重构时同步多个表

我需要你的智慧。我正在对从经典 asp 到 mvc 的系统进行大修,并且在此过程中,我正在重构 sql server 2008 r2 中的一个主表(称为 MAIN)。该表有一百多列(我对此不负责),我将结构移动到 7 个表以提高性能、灵活性和可维护性。但是,新旧代码在许多新旧页面中都引用了 MAIN 表。我想平稳而渐进地过渡到新表,它是业务的一个活跃的核心站点。请帮帮我。

一旦我转移了现有数据,

我想过:

1.) 在主表和七个新表上使用标准插入、更新和删除触发器。对于无限触发循环,我必须包含一个 catch (http://stackoverflow.com/questions/2237499/sql-server-trigger-loop)。

2.) 创建一个模拟主表的视图,引用新表。我会在视图上使用 INSTEAD OF 触发器来通过视图插入和更新表。这将允许我立即删除 MAIN 表。

其中哪个更有意义?要么是极其愚蠢的吗?两个都?我绝对不是 dba,但我需要在第一时间做到这一点。

谢谢你。

0 投票
1 回答
411 浏览

oracle - ArcSDE 数据库重构工具选项

我们在我们的应用程序中使用 liquibase 作为进化的数据库变更管理工具,当我们在“通用”数据库模式中使用它时效果很好。

但是我们也使用 esri arcSDE 9.3 平台而不是 Oracle 来处理 GIS 应用程序,在这种情况下,模式中的所有(或几乎所有)表(GIS 和“字母数字”表)都通过以下方式进行管理(创建表、授权等)弧SDE。因此,当我们现在要创建新的要素类时,我们使用 arcCatalog,这样就无法使用 liquibase 或其他自动重构工具直接通过 SQL 来管理要素类的更改。

因此,如果我们不能使用 liquibase 来管理更改,至少我们希望通过命令行对我们的功能执行管理操作。我们已经开始寻找避免使用 arcCatalog 的工具,然后尝试使用脚本自动化更改,我们正在研究这些可能性:

  1. 每次我们对监视 oracle 连接的一个要素类进行更改时,尝试捕获 arcCatalog/arcSDE 正在执行的 SQL。它给我们带来了一组过于复杂的 SQL 指令,包括索引、版本控制表等,所以我们放弃了这种方式。

  2. 使用安装在 arcSDE 服务器上的sdelayer 和 sdetable 管理命令。

  3. 使用数据管理工具:一个基于 python 的库来管理要素类,但它必须在安装了桌面版本的机器上执行。

最后两个选项将提供一种从命令行管理功能的方法,但我们的目标是找到/开发一种工具来管理类似于 liquibase 的方式的更改。但是有了这些工具,我们必须找到一个工具,让我们将每个 SQL DDL 操作映射到一个 arcSDE 命令,而目前没有 db 重构工具提供这个(目前我们有检查 liquibase、dbdeploy、flyway)。

有人用 arcSDE 解决了这个进化变更管理问题吗?对解决此问题的另一种方法有何见解?

0 投票
1 回答
266 浏览

c# - Db4o - 如何一步重命名字段?

正如我在db4o 文档(.net 版本)中所读到的,我认为要重命名类中的字段,我必须将以下内容添加到我的代码中(当然,还要重命名类中的实际字段):

然后把这段代码留在那里。但是我对此进行了测试,但它不起作用(数据库中的对象不会加载重命名的字段)。起作用的是按照此页面中的说明进行操作,这些说明是

  1. 配置重命名
  2. 使用1中创建的配置打开数据库
  3. 关闭数据库
  4. 更改代码中的字段名称
  5. 现在再次打开数据库时不要配置重命名。

这对我来说似乎有点奇怪。我的程序需要只使用 rename 调用运行一次,然后运行没有 rename 调用但重命名实际字段。问题是:有没有一种方法可以一步有效地重命名?

有效的步骤可能意味着一些额外的努力,例如,在更新嵌入式(移动)应用程序的过程中 - 在客户端上安装新版本(重构)之前,有必要运行一次重命名调用。有没有办法避免它?我是否遗漏了某些内容,或者是否有其他方法可以重命名 db4o 数据库中的字段?

0 投票
1 回答
421 浏览

sql - 将自动增量 ID 重构为 **SQL DB 中的 GUID

Jeff其他人让我相信 GUID 比自动增量 ID 更可取。我有一个由自动增量 id 索引的 Postgres 数据库,所以我想将索引“重构”为 UUID。除了编写遍历表的函数并检查表之间的索引匹配之外,是否还有一些通用(或特定)方法来执行此操作?

更新

  • 注意:数据库当前未投入生产,因此性能和事务完整性不是问题。
0 投票
1 回答
947 浏览

sqlite - 按 sessionid 字段拆分大型 sqlite 表

我对 sql(ite) 比较陌生,并且在从事新项目时正在学习。我们在一个“数据”表中有数百万个事务行,其中一个字段是“sessionid”字段。

由于我现在想专注于会话中的活动,因此我主要只需要查看来自相同会话的事务。

我现在的直觉是,如果我将数据库按会话分成许多单个会话表,这将比总是查询单个 sessionid 然后继续执行要快得多。我的问题:正确吗?这会有所作为吗?

即使不是:你能帮我告诉我,我如何将一个“数据”表行拆分为许多特定于会话的表,这些行保持不变?加上一张将 sessionIds 与他们的表相关联的表?

谢谢!


一位朋友刚刚告诉我,拆分成表的事情会非常不灵活,我应该尝试为不同的 sessionId 行添加一个不同的索引来更快地访问单个会话。对此有什么想法以及如何做到最好?

0 投票
1 回答
235 浏览

mysql - 有没有办法记录对 MySQL 中特定列的读/写访问?

MySQL中是否有任何方法可以记录访问表中某个列的任何查询?

目的: 出于重构目的,我需要这样做 - 我必须更改数据库的结构,但因为当时我不够聪明,无法使用唯一的可搜索列名,所以现在我很难找到我的所有地方我处理该列的 PHP 代码。因此,如果我可以开始记录所有随着时间的推移访问该列的查询,我就可以全面了解哪些查询使用该列,从而能够修改我的 PHP 代码(假设所有可能的查询在那段时间都运行了一段时间) )。

0 投票
2 回答
1152 浏览

sql - 如何重命名 SQL 表列名而不破坏内容

我从初学者开始重新审视了我的一些代码,发现一些 SQL 表的列名是如此模棱两可,让我感到畏缩。

现在,如果我继续更改名称,则纠正代码中的所有映射所需的时间和精力在这一点上似乎是不合理的。

我想知道在插入数据库时​​是否可以提供别名?

我问是因为你可以像这样使用别名SELECT

或者有没有人对我如何做到这一点有任何其他建议?