在一个非常敏捷的项目开发中,频繁更新最棘手的问题是重构表和列命名。
当我们处理不高风险的代码时,我们可以在Production数据库中添加一个列或一个表,并继续处理实际数据 - 省略更新脚本的麻烦并使用ProductionDb中的最新数据更新我们的TestDb。
只需添加列,为其添加默认值即可。在这种情况下,没有什么可怕的。一切都在继续,没有停机时间,没有更新脚本的麻烦。
问题
有时候我们想要重构列名,因为它们在事后的想法中并没有很好的选择。
我想知道这样的事情是否可行:
结果:重构列/表名称时没有任何停机时间或更新脚本。
这可能吗?我们使用实体框架和 SQL Azure 。
答案 0 :(得分:2)
或许有点天真:
表的替代名称:
create view new_table_name as
select *
from old_table_name
列的替代名称:
create view new_table_name as
select x.*, x.old_column_name as new_column_name
from old_table_name x
以下陈述有效:
update old_table_name
set old_column_name = value
where key = key_value
update new_table_name
set old_column_name = value
where key = key_value
update new_table_name
set new_column_name = value
where key = key_value
另请参阅:How to rename SQL table column name(s) and not break stuff
答案 1 :(得分:0)
您无法为列名或表名创建别名,如果您不想在某个阶段更新数据库列/表名,则需要运行脚本。
虽然在您的代码中通过EF,您只需更新该列或表的属性名称,并保持映射到原始数据库名称。这意味着至少您的对象将具有新的/更好的名称。