小编Joh*_*ith的帖子

将数据库内容从一个非常差的结构迁移到一个非常合理的结构的最佳实践?

TL; DR什么是在一个结构非常差的数据库(具有多次重复列,没有相互关系和重复数据)之间迁移大量数据到另一个高度组织和关系结构的最佳方法? - 对不起,长期阅读!

我最近接受了一项非常复杂的工作.它改写了整个公司基于网络的IT平台.我担心我不能提供太多细节,因为我们不能让老开发者知道(他有一个反对公司负责人的隐喻枪,因为他是唯一一个知道如何做发票生成等关键事情的人,并要求越来越多的钱).

主要问题是整个网络平台(由所有员工和所有客户使用)由一个技能低于业余的人编码.它由大约300个单独的代码文件组成.没有模板库 - 它全部硬编码到每个文件中.没有逻辑数据库结构 - 它实际上是随着他的进展而组成的.没有安全感 - 令人震惊.无论如何,我们将在约3个月的时间内重写整个平台.

然而老板说,早上它上线,任何地方都不会丢失任何客户数据.必须直接复制整个数据库内容.数据库的结构目前很差,几乎不可能使用,但本周我们将(试图!)编写一些脚本,将其迁移到我们新的,高度关系的结构,这更符合逻辑.问题是,最好的方法是什么?

一个例子是地址.在旧数据库中,地址用于大约12个表中(总共4​​4个表...).在我们的网站中,我们有一个addresses表将被其他表(例如address_id)交叉引用以保持清洁.主要的问题是,在大约一半的表,地址存储为line1,line2,town,city,等,这是很好的,但在另一半,他只是有一个单一的address存储整件事场!

第二个例子是日期-在某些表他秒纪元以来的日期,在别人MySQL的NOW()日期,而在其他他硬是将其存储在每行6列- ,year,month,day,,hour -哎哟...minutesecond

  • 试图解决这个问题的好方法是什么?我们应该看看我们的表,在哪里工作,我们需要拉从数据到我们,或者我们应该扭转这种看看他的表和工作了,他的数据需要进入我们的?

  • 从编程的角度来看,我们应该如何解决这个问题?许多数据需要动态格式化(例如日期),因此我们考虑一次一行地采集数据,正确格式化,然后将其重新插入脚本中的正确位置.

  • 查询的速度和效率对我们来说不是问题,因为我们只需要在本地计算机上运行一次(在测试之后).当SQL转储时,他的数据库目前大约是800MB,但是这很多都是他无用的测试数据,或者说完全没必要.

关于解决这个问题的最佳方法的任何想法?作为参考,我们的系统将用PHP重写,因此任何基于PHP的建议都会很好.该数据库目前(现在仍将是)在MySQL中.

mysql database migration database-design relational-database

17
推荐指数
3
解决办法
3882
查看次数