在父表和子表之间引入新表

时间:2010-10-23 15:28:50

标签: sql database database-design sqlite

如果我的父表和子表填充了数据,那么在它们之间添加新表是否微不足道?

例如,在介绍之前,关系是:

父母 - >子

然后:

父母 - >新表 - >子

在这种情况下,我指的是SQLite3,因此此模式中的Child具有与父表的主键匹配的外键。

谢谢!

2 个答案:

答案 0 :(得分:2)

这可能太明显了,但是......

它有多么微不足道将取决于已经编写了多少需要随之改变的代码。如果这是一个新的应用程序,编写的代码很少,而你刚刚开始研究设计,那么是的,它是微不足道的。如果您有大量的函数(无论是外部代码,还是存储过程和视图等数据库代码)访问这些表,期望原始关系,那么它就变得不那么重要了。

如果您知道足够的SQL来填充新表并设置关系,那么在数据库中更改它应该是相对不重要的。

与所有开发挑战一样,您只需要查看将受影响的内容,方式以及确定如何对这些更改进行说明。

所有这一切都是一种啰嗦的说法,“这取决于你的情况”。

答案 1 :(得分:0)

我根本不同意大卫的意见,只是准确地说明了改变的几个方面。

如果您已经实施了合理的标准,那么唯一受代码影响的代码就是处理Child(而不是New_Table)中已更改列的代码。如果还没有,那么不需要改变的未知数量的代码将不得不改变。

第二个考虑因素是儿童主键的质量。如果您有自然关系密钥,则添加New_Table的影响较小,而不是需要更改数据。如果您有IDENTITY类型的密钥,那么您可能需要重新加载,或者更糟糕的是,“重新计算”密钥。

最后,介绍New_Table是对Normalization错误的修正,这是一件好事。因此,某些Child.columns将成为New_Table.columns,并且可以从现有数据加载New_Table。您需要正确而完整地执行此操作,以便从纠正中实现性能提升。这可能意味着更改几个代码段。

如果你有ANSI SQL,那么所有任务都非常简单直接。