【问题标题】:What is the procedure to normalize a database with PHP?使用 PHP 规范化数据库的过程是什么?
【发布时间】:2016-03-16 21:48:47
【问题描述】:

我刚刚接手了一项非常糟糕的数据库设计工作,它大量使用逗号分隔值来存储数据。我知道我知道,这是地狱。

db 是 mysql,目前使用 MySql Workbench 访问它。

我已经想到要删除什么,以及需要什么新关系表。

所以,我的问题是,我应该如何将逗号分隔的数据迁移到新表?有没有专门用于规范化数据库的工具?

编辑: 服务器代码是 PHP 的。

【问题讨论】:

  • 您希望用什么语言转换数据库?
  • 服务器使用 PHP。对不起,这里的菜鸟,我需要编写代码从旧表中选择并插入到新表中吗?

标签: php mysql normalize


【解决方案1】:

看来您正在寻找标准做法。那里有不同程度的非规范化数据库。我遇到的那些已经用自定义代码和工具进行了规范化。

SQL Server Integration Services (SSIS) 可用于某些情况。在你的情况下,我会为涉及的迁移构建一个脚本:

  • 规范化表的创建
  • 创建存储过程或 PHP 脚本以从非规范化表中读取数据,对其进行转换并将其加载到规范化表中
  • 创建日志表或日志文件
  • 在沙盒中执行迁移;边写日志
  • 版本控制脚本
  • 根据需要更正 proc/脚本
  • 创建另一个沙盒
  • 在沙盒上运行完整的脚本
  • 如果成功,则在 prod 上运行完整脚本(带日志记录)

SSIS 在许多组织中用于 ETL;它是 Microsoft BI 堆栈的标准工具,也可用于在非 Microsoft DB 之间迁移数据。

名为 Talend 的开源 ETL 工具也可能有助于转换您的数据。我个人认为 PHP 脚本将是最快和最容易操作数据的。

【讨论】:

  • 感谢您的回复。这是相当详细的,但是,SSIS 不是免费的。但我明白了整个想法。
【解决方案2】:

首先定义新的表和属性。

然后,在 MySQL 调用中使用 PHP 或 Python 或您最喜欢的语言并编写一个 1 次转换器,该转换器循环并读取旧表并记录并将正确的记录插入新表中。

【讨论】:

  • 感谢您的回答。这是标准做法吗?我现在不介意这样做,但如果我能学习工业化的做法,那就太好了。
  • 根据我的经验,每一种对结构不佳的数据进行规范化的情况都需要自定义解决方案。如果有足够的 sql 调用经验,您会发现这个自定义脚本相当简单。现有数据没有风险,因为您只是在阅读它。为规范化表编写新的生产代码很容易针对旧设置进行验证和测试。
猜你喜欢
  • 1970-01-01
  • 2011-05-18
  • 2015-06-28
  • 2017-02-06
  • 2010-11-25
  • 2010-09-05
  • 2012-09-04
  • 2012-03-22
  • 1970-01-01
相关资源
最近更新 更多