0

是否可以建立从用户表到系统的关系桌子看法?为了给出上下文,我希望我的一个表中的列的被限制为我的另一个表的列名,这似乎最容易通过查看包含第二个列名的系统视图来完成桌子。

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

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

谢谢!

PS我问这个问题是为了帮助我解决我在SO上发布的另一个问题。

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

4

3 回答 3

2

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

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

您面临的风险是,最终您将得到一个无法根据对主题专家有意义的属性进行记录的数据库。换句话说,您的数据库只能由您自己和您的极客同行使用。有时这是可以接受的风险。有时不是。

于 2009-06-30T20:27:06.720 回答
1

依赖系统表总是一个坏主意,因为 MS 可以在没有警告的情况下更改它们。为什么不使用信息模式视图,它们旨在可移植并支持需要查询元数据的应用程序?

于 2009-06-30T20:27:04.473 回答
0

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

于 2009-06-30T20:24:56.303 回答