代码之家  ›  专栏  ›  技术社区  ›  JoeCool

您能与系统表/视图建立关系吗?

  •  0
  • JoeCool  · 技术社区  · 15 年前

    可以从用户表到系统建立关系吗 桌子 视野?为了提供上下文,我希望 价值观 我的一个表中的一列的 列名 在我的另一个表中,通过查看包含第二个表的列名的系统视图,这似乎是最容易做到的。

    因此,使用经典示例,如果我有一个客户表(firstname lastname),我想创建另一个表,该表的“customerAttribute”列只能是“firstname”或“lastname”。为了保持这一动态性,如果“customerAttribute”列实际上是系统视图中的一个外键,用于存储名称或对于customer表中的列;这样,在实际customers表中添加、删除和重命名列时,就不必担心数据完整性问题。

    我没有看到在SQL Server中创建这种关系的简单方法,所以我想知道,与系统表和/或视图的关系是否是一个主要的禁忌。

    谢谢!

    另外,我问这个问题是为了帮助我解决 another problem 我已经发布了。

    编辑:即使不能直接与系统视图建立关系,也可以创建一个将查询返回到系统视图(以获取列名称)的视图,然后与该视图建立关系…我现在就试试。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Walter Mitty    15 年前

    显然,没有什么可以阻止您创建引用系统表列的用户表列。所以显而易见的答案是肯定的。要回答真正的问题,需要问一个不同的问题,即:将元数据存储在用户表中是一个好主意吗?

    如果我从数据管理纯粹主义者的角度来回答,我会说这几乎总是一个坏主意。然而,作为一个实际问题,我已经做到了,尽管我并不为此感到骄傲。通过混合数据和元数据,您可以得到一些结果,如果不混合它们,这些结果几乎是不可能实现的。

    你所面临的风险是最终你会得到一个数据库,这个数据库不能用对主题专家有意义的属性来记录。换句话说,您的数据库只能由您自己和您的同事使用。有时这是可以接受的风险。有时候不是。

        2
  •  1
  •   anon    15 年前

    依赖于系统表总是一个坏主意,因为MS可以在不发出警告的情况下更改它们。为什么不使用 information schema views ,哪些是可移植的,并支持需要查询元数据的应用程序?

        3
  •  0
  •   Michael Bray    15 年前

    我不确定这是否可能,但如果可能的话,那你肯定是在危险的地面上行走…如何重命名列?如何移动列?如何删除列?这种类型的东西可能会在SSMS内部破坏很多。这种类型的事情最好用触发器或代码逻辑来处理。

    推荐文章