2015-04-01 98 views
0

我有一个数据库,我正在创建,并与Mysql中的另一个表进行了1对1连接,下面是一个屏幕截图。我的问题是,我可以删除创建连接时创建的额外列(assembly factory_id)吗?我只想要单一的(factory_id)这会搞砸我建立的连接吗?我应该放下(factory_id)并让连接继续吗? 我是小白,谢谢!可以删除它吗?

enter image description here

回答

1

我假设您的评论“但我应该删除表吗?”真的意味着说“但我应该放弃专栏?”。

简短的回答:如果安全,您应该删除该列 - 没有理由让它混乱数据库和未来开发人员的头脑。如果1)factory_id中的值IS和ALWAYS将与组件factory_id相同,例如它们是彼此的重复值,并且2)没有其他表或程序是其它的表或程序代码引用程序集factory_id,则可以安全地删除程序集factory_id。

但是,如果有任何机会,他们意味着不同的事情(不只是20行左右的样本),你不能删除它。请参阅小提琴:http://sqlfiddle.com/#!9/0bf17/1

如果它们总是相同,但数据库或代码的某些部分引用程序集factory_id,那么可以重构那些数据库或代码部分来引用factory_id,然后删除程序集factory_id。

在做这样的事情时,应该进行测试以验证更改后的查询和程序状态与更改前的状态相同。

+0

非常感谢!那是我需要的答案!是的,我的意思是专栏,而不是表:) – beau8008 2015-04-01 20:10:10

1

您可以使用ALTER语句删除多余的列。

ALTER TABLE table_name DROP COLUMN factory_id; 

您也可以参考http://docs.oracle.com/cd/E18283_01/server.112/e17118/statements_3001.htm#i2103683 (下降特定列条款)

编辑: 至于连接方面,ALTER语句转储到一个临时表,然后在不丢失任何重建连接。请参阅存储,性能和并发注意事项在此document

+0

但是我应该放下桌子吗?那是我的问题。 :) – beau8008 2015-04-01 02:19:49

+0

因为我做了1对1的连接,所以添加了额外的列,如果我摆脱了“factory_id”会改变什么? – beau8008 2015-04-01 02:20:33