我有一个应用程序(C#)期望一个SQL数据库和登录,这是由用户设置。一旦连接,它将检查是否存在多个表格,如果没有找到,则创建它们。
我想通过让程序能够向这些表添加列来扩展这一点,如果我发布依赖新列的程序的新版本。
问:
什么是编程检查现有的SQL表的结构和创建或更新,以符合预期结构的最佳方式?
我打算遍历所需列的列表,并在它不包含新列时更改现有表。我不禁想知道是否有一种不同或更好的方法。
标准:
这里有一些我的期望和自我强加的规则:该程序可能不再使用某些列的
- 较新的版本,但他们将被保留数据记录目的。换句话说,没有列将被删除。
- 表中的现有数据必须保留,所以不能简单地删除和重新创建表。
- 在所有情况下,新添加的列将允许空数据,因此通过具有默认空值来处理旧记录的数量。
例子:
下面是一个示例表(因为视觉的例子帮助!):
id datetime sensor_name sensor_status x1 x2 x3 x4 1 20100513T151907 na019 OK 0.01 0.21 1.41 1.22 2 20100513T152907 na019 OK 0.02 0.23 1.45 1.52
然后,在新版本中,我可能要添加列x5
。 “x
-columns”都是接受null的数据存储列。
编辑:
我更新上述试样台。它更多的是日志而不是父表。因此传感器将在记录表中反复显示记录的值。一个单独的父表包含地理和其他物流信息约传感器,使得我希望修改表的子表。
麻烦是对的!我希望能够向我们的客户发布新版本,以便他们不必修改他们的数据库。我还不确定我将如何利用Sql Compare(因为我实际上无法将* old *表与新的表进行比较(新的表不会在他们的服务器上存在)。在EAV上。 – JYelton 2010-05-14 21:29:26
将此项目转换为EAV可能是最佳解决方案。这将会更长远一些,但它似乎正好处理这种类型的应用。 – JYelton 2010-05-18 15:17:15
@JYelton - 我不同意EAV是你最好的选择。请注意Paul Sasik的帖子末尾的关键部分:“我们不做大量报道”。这是难题的关键之一。与仅仅提取数据相比,搜集信息与EAV中的数据完整性和其他一系列问题相比,难度要大得多。如果你所做的只是存储一大堆你永远不会报告的数据,并且永远不会查询某个特定的属性,而是总是将整个数据集合起来,那么EAV就没有问题。否则,你可能会要求维修头痛。 – Thomas 2010-07-15 04:20:10