【问题标题】:Can you have relationships to system tables/views?您可以与系统表/视图建立关系吗?
【发布时间】:2010-11-07 03:19:22
【问题描述】:

是否可以从用户表到系统 视图建立关系?为了给出上下文,我希望我的一个表中的列的 values 被限制为我的另一个表的 column names,这似乎最容易做到通过浏览包含第二个表的列名的系统视图。

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

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

谢谢!

附:我问这个问题是为了帮助我解决 another problem 我在 SO 上发布的问题。

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

【问题讨论】:

  • 我希望我永远不必在这样设计的系统上工作。
  • 你可以,但我不知道它是否合法;)抱歉无法抗拒

标签: database-design sql-server-2008 system-views


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这很好,实际上可能是我想要的,因为我已经进一步研究了它。但是在视图上添加依赖关系是不是很糟糕?还是可以接受?
    • 我认为可以接受。过去,另一种选择是维护自己的“元数据”表,如果可以使用信息模式等标准化设施,这显然是愚蠢的。
    • 只有拥有它们才傻。在这种情况下,微软拥有它们。 (我知道,有一个标准。当然,微软从不与标准交叉。)
    • 虽然我不完全确定外键是否是唯一的依赖类型,但我刚刚发现您不能拥有引用视图的外键。因此,您的建议将不起作用(除非您指的是其他类型的依赖项)
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 2011-08-06
      • 2017-12-09
      • 2018-07-09
      • 1970-01-01
      • 2011-06-09
      相关资源
      最近更新 更多