因此,在我解决问题之前,您首先必须了解问题的背景。
上下文
我在.NET(C#)中创建一个模块,用户可以在其中构建自己的模块 “意见”。视图是用户可以查看的内容。它可能是一个 表视图,图表视图,电子表格视图等。视图是基于 一个SQL查询。用户可以通过非常用户构建此查询 友好的GUI,也称为“查询构建器”。这个查询 正在存储在数据库中,因为用户想要打开他的 查看下一次并立即查看其中的数据。
问题:
可能是我们将来重命名某个专栏。意思是 数据库中存储的查询或视图也必须是 更新。
最好的办法是什么?
我做了什么/调查过:
我知道创建表视图可能更好,而不是将查询存储在表中。但这并不能解决我的问题。
可能的解决方案:
解决方案1: 创建数据库触发器。重命名列时,检查所有存储的视图,对查询进行子串,并将旧列名替换为新列。如果我使用表视图,我可以删除视图并重新创建它。
此解决方案的缺点:使用数据库触发器时可能会出现性能问题。
解决方案2: 列包含元数据。我能做的是将列id与当前列和表名一起存储在表中。 重命名列时,我遍历已保存查询中的所有列,检索元数据并检查列名是否仍与元数据中的列名相等。
解决方案3: 不要将查询保存在数据库中,创建一个引用数据库列的可序列化对象。这个解决方案的问题是你在代码级别解决它,而这是一个数据库问题。
有谁知道更好的解决方案吗?有没有办法在重命名列时自动更新视图或查询?
答案 0 :(得分:0)
由于我使用的是NHibernate,最好的解决方案是3号。 使您的域名实体可序列化。
编辑数据库中的列时,您需要做的就是更改实体的映射。问题解决了。