2009-06-30 63 views
0

是否有可能从用户表到系统视图有关系?为了给出上下文,我希望我的一个表中列的限制为另一个表的列名,这似乎最容易通过浏览包含列的系统视图来完成第二个表的名称。你可以与系统表/视图有关系吗?

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

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

谢谢!

P.S.我问这个问题,以帮助我解决another problem我发布在SO上。

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

+0

我希望我永远不必在这样设计的系统上工作。 – 2009-06-30 20:31:02

+0

你可以但我不知道它是否合法;) 抱歉无法拒绝 – Janusz 2009-06-30 20:33:39

回答

2

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

如果我要从数据管理纯粹主义者的角度回答,我会说这几乎总是一个坏主意。然而,实际上,尽管我并不以此为荣,但我做到了。通过混合数据和元数据可以获得一些结果,这些数据和元数据在不混合的情况下几乎不可能实现。

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

0

我不确定这是否是可能的,但如果是的话,那么你肯定是踩在危险的地面上......你如何重新命名一列?你将如何移动一列?你会如何删除列?这种类型的东西可能会在SSMS内部破碎。这种类型的东西最好用触发器或代码逻辑处理。

1

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

相关问题