由外键控制的值

2023-12-14

我在 SQL Server 中有一个非常简单的数据库,包含以下三个表:

  • Theater (ID, is3D,其他值...)
  • Show (ID, Theater_ID, Movie_ID, date, time,其他值...)
  • Movie (ID, is3D,其他值...)

我想确保3D电影只能在3D影院播放。 2D 电影仅在 2D 影院放映,并且仅通过外键执行此操作(无触发器等)。


要仅通过外键执行此操作,您需要添加is3D列至Show还有一些逻辑上多余的UNIQUE限制。

CREATE TABLE Theater
  (
     ID   INT PRIMARY KEY,
     is3D BIT NOT NULL,
     /*Other columns*/
     UNIQUE(ID, is3D)
  )

CREATE TABLE Movie
  (
     ID   INT PRIMARY KEY,
     is3D BIT NOT NULL,
     /*Other columns*/
     UNIQUE(ID, is3D)
  )

CREATE TABLE Show
  (
     ID         INT PRIMARY KEY,
     Theater_ID INT NOT NULL,
     Movie_ID   INT NOT NULL,
     is3D       BIT NOT NULL,
     /*Other columns*/
     FOREIGN KEY(Theater_ID, is3D) REFERENCES Theater (ID, is3D),
     FOREIGN KEY(Movie_ID, is3D) REFERENCES Movie (ID, is3D)
  ) 

索引视图也可以用于以声明方式强制执行此操作,而不需要额外的列或唯一约束,如下所示。

CREATE TABLE dbo.TwoRows
  (
     X INT PRIMARY KEY
  );

INSERT INTO dbo.TwoRows
VALUES      (1), (2)

GO

CREATE VIEW V
WITH SCHEMABINDING
AS
  SELECT S.Theater_ID,
         S.Movie_ID
  FROM   dbo.Show S
         JOIN dbo.Theater T
           ON S.Theater_ID = T.ID
         JOIN dbo.Movie M
           ON S.Movie_ID = M.ID
         CROSS JOIN dbo.TwoRows
  WHERE  T.is3D <> M.is3D

GO

CREATE UNIQUE CLUSTERED INDEX IX
  ON V(Theater_ID, Movie_ID) 

如果满足规则,基础查询应始终不返回任何行。如果有任何一行is返回然后交叉连接dbo.TwoRows会将其相乘,导致违反唯一约束并防止出现这种情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

由外键控制的值 的相关文章

  • MySQL通过UPDATE/DELETE合并重复数据记录

    我有一个看起来像这样的表 mysql gt SELECT FROM Colors ID USERNAME RED GREEN YELLOW BLUE ORANGE PURPLE 1 joe 1 null 1 null null null 2
  • SQL Server 2008 中的全文搜索一步一步

    如何开始使用SQL Server 2008 中的全文搜索 阅读这些链接 SQL SERVER 2008 创建全文目录和全文搜索 http blog sqlauthority com 2008 09 05 sql server creatin
  • 处理大数据表时应该如何使用Hibernate Mapping

    问题定义 我有一个包含大量数据 超过 100 000 行 的数据库表 表结构如下 AppID DocID DocStatus 1 100 0 1 101 1 2 200 0 2 300 1 每个 applicationID 可能有数千个文档
  • PostgreSQL 窗口函数:row_number() over(按 col2 分区 col 顺序)

    以下结果集源自具有一些连接和联合的 SQL 查询 SQL 查询已经对 Date 和 game 上的行进行了分组 我需要一列来描述按日期列分区的游戏的尝试次数 Username Game ID Date johndoe1 Game 1 100
  • PL/SQL 过程:如何返回 select 语句?

    我想创建一个存储过程 on ORACLE数据库服务器我的问题是 我不知道如何返回 select 语句 这是程序中应包含的逻辑 输入参数 过滤器1 int 过滤器2 字符串 with cte as select val1 val2 stdde
  • 无法将 CLOB 数据存储到 DB2 中的 CLOB 定义的列中

    我猜这是一个重复的问题 但尚未找到合适的解决方案 基本上 我试图通过以下方式将大一点的 XML 即 32000 个字符 插入到 CLOB 列中 DB2程序 插入失败并出现以下错误 看起来 DB2 正在将输入视为 String 而不是 CLO
  • Laravel Eloquent 预加载:加入同一个表两次

    我有一个users表和一个约会桌子 在约会表中 我有两个用户 ID customer id staff id 我想检索所有带有客户姓名和员工姓名的约会 users table id name appointments table id st
  • 将自动递增值添加到只有一列的表中

    我需要创建一个基本上仅保留索引列表的表 因此 我创建了一个只有一个名为 id 的自动递增列的表 但是 我似乎无法隐式地将自动递增值添加到该表中 我知道通常当您在表中有这样一列 不仅仅是此列 时 您可以执行以下操作 插入表 col1 col2
  • IN 运算符对 SQL 查询性能的影响有多大?

    我的 SQL 查询需要 9 个小时才能执行 见下文 Select Field1 Field2 From A Where Field3 IN 45 unique values here 当我将此查询拆分为 3 个完全相同的查询 仅每个 IN
  • 如何在“order by”中添加条件?

    我有一个带有输入参数的存储过程 现在根据这个参数 我的 order by 语句将发生变化 如果输入参数是 ID int类型列 则按ID排序 如果是 ProductType 则按产品类型排序 如果是 IssueDate 则应按问题日期排序 现
  • 迁移问题:MS SQL > MySQL:插入缓冲区内存

    我在使用 MySQL Workbench 上的内置迁移工具时遇到问题 我正在将一个非常大的数据库从 MS SQL 2014 迁移到 MySQL MS SQL 服务器本地部署在我的 Windows 8 1 桌面上 MySQL 服务器在我的网络
  • where 子句中的双 %% ?

    我有一个 where 子句 如下例所示 WHERE subject LIKE chef AND dep LIKE psy 使用 1 或 2 符号有什么区别 我知道其中一个的含义 通配符 但不知道第二个添加的功能是什么 该查询可能是一个拼写错
  • 了解 SQL Server 排序规则中的 Unicode 和代码页

    为什么所有 SQL Server 2008 R2 排序规则都与代码页相关联 所有排序规则都是 unicode 吗 当您的数据库被使用不同代码页的多种语言使用时 如何选择排序规则 谢谢 CHAR 与 NCHAR 即非 Unicode 与 Un
  • SQL Server - SQL 替换整个数据库中所有表中的所有列

    这是一个很遥远的事情 我猜这个问题没有简单的答案 但是 我继承了一个数据库 其中填充了一些可怕的数据 许多包含描述的行都有回车符 这意味着当我们 BCP 输出数据时 它会带有回车符 我的问题 有没有办法在 MS SQL Server 中对整
  • 在 Oracle 中使用数据透视表的建议

    我需要一份报告 我应该使用数据透视表 报告将按类别分组 使用 case when 语句不好 因为有很多类别 您可以将 Northwind 数据库视为示例 所有类别将显示为列和报告将显示客户在类别中的偏好 我不知道另一个解决方案 并在互联网上
  • 将数据表传递到存储过程。有没有更好的办法?

    数据表可以以某种方式传递到 SQL Server 2005 或 2008 中吗 我知道标准方法似乎是将 XML 传递给 SP 并且可以通过某种方式轻松地将数据表转换为 XML 来实现这一点 将 NET 对象传递到 SP 怎么样 那可能吗 我
  • 在 SQL Management Studio 2012 中调试

    我正在使用 Management Studio 2012 但无法调试任何 SQL 代码 在我点击 调试 按钮后 左侧没有看到任何绿色箭头 并且我的 SQL 对象都没有加载到内存中 当我将光标移到我设置的断点上时 我收到此消息 The bre
  • SSRS ReportViewer 与 XML 嵌入数据源相关的问题

    我有 C WPF 应用程序 我想在 ReportViewer 控件中显示 SSRS 报告 本地报告文件中嵌入了 XML 数据源 从 SQL Server Business Intelligence Development Studio 运行
  • Guid.NewGuid().GetHashCode() 用于数据库

    这对于用作数据存储 SQL Server 的 ID 可靠吗 我会使用 guid 但我更喜欢数字值 A guid更有可能代表一个记录uniquely than a numeric value 随着 GUID 确保全球唯一性 GUID 可以跨数
  • parent_id 是外键(自引用)并且为 null?

    浏览 Bill Karwin 的书 SQL Antipatterns 第 3 章 Naive Trees 邻接表 父子关系 有一个注释表的示例 CREATE TABLE Comments comment id SERIAL PRIMARY

随机推荐

  • 从 testcafe 中打开的第 N 个模式中选择“确定”按钮

    我在测试中打开两个模态 我希望能够单击第二个模态中的 确定 按钮 下面 html 中的第二个选定元素 我当前的代码是 import waitForReact from testcafe react selectors import Sele
  • shinyjs - setBookmarkExclude 用于延迟 ID

    我试图从 Shiny 的反应式书签上下文中排除 ShinyJS 延迟 我看到 URL 中的延迟 ID 是自动生成的 并且始终不同 delay ad190e10123bd97f960fed7a8a9e6fde 3000 我试图通过正则表达式排
  • JoyGetPosEx 在 C# 中返回 165

    我尝试用 C 读取 JoyStick 中的数据 只要我使用 jeyGetPos 就可以正常工作 但我需要使用joyGetPosEx 因为它提供了更多数据 例如我需要的操纵杆的旋转 class JoyStick JOYINFO pji JOY
  • php:从 html 获取纯文本 - simplehtmldom 或 php strip_tags?

    我正在考虑从 html 获取纯文本 我应该选择哪一个 php条带标签 or 简单的htmldom明文提取 simplehtmldom 的优点之一是支持无效 html 这本身就足够了吗 strip tags就足够了
  • 合并哈希数组

    我有两个数组 每个数组都包含带有属性哈希的数组 Array1 gt attribute 1 A attribute 2 B attribute 1 A attribute 4 B Array2 gt attribute 3 C attrib
  • 同步安装后节点找不到某些模块

    我有一个在启动时同步安装非内置模块的脚本 如下所示 const cp require child process function requireOrInstall module try require resolve module cat
  • 单例模式 - 默认属性

    我一直在研究设置类中使用的单例模式 以下是我的项目 AccessTest 的 Settings Designer cs 的相关代码 internal sealed partial class Settings global System C
  • 如何检查 IOException 是否为 Not-Enough-Disk-Space-Exception 类型?

    我怎样才能检查是否IOException是 磁盘空间不足 异常类型吗 目前 我检查该消息是否与 磁盘空间不足 之类的内容匹配 但我知道如果操作系统语言不是英语 这将不起作用 您需要检查HResult并测试ERROR DISK FULL 0x
  • 无需轮询即可订阅 MySQL 数据库中的更改

    我有一个由不同应用程序更新的 MySQL 数据库 我想从我的 Node js 服务器订阅该数据库的更改 是否可以监视数据库的任何更新 而无需长时间轮询所有行 列以了解其值的任何更改 我见过的一种可能的解决方案是使用 Redis 订阅数据库以
  • 如何安装边缘导轨?

    如何安装最新的 未发布的 Rails 版本 即边缘导轨 已遵循一些建议 但似乎仍然有版本 2 3 5 你所要做的就是跑rake rails freeze edge在你的项目中 如果您还没有开始项目 另一个选择是 mkdir p foo ve
  • 如何在数据框的每一行上执行函数,并仅将输出的一个元素作为新列插入到该行中

    对两个值进行精确二项式测试很容易 但如果想对一大堆成功次数和试验次数进行测试会发生什么 我创建了一个包含测试敏感性 研究中潜在参与者数量的数据框 然后对于每一行 我计算了成功的可能性 这是代码 sens lt seq from 1 to 5
  • Git - 从 SHA1 查找文件名

    我将一个文件添加到索引中 git add somefile txt 然后我通过以下方式获取了该文件的 SHA1 git hash object somefile txt 我现在有一个 SHA1 我想使用 SHA1 检索索引中对象的文件名 g
  • 当程序状态不断变化时,不可变对象的用处

    我知道不可变对象始终具有相同的状态 即它们实际创建时的状态 它们的不变量是由构造函数建立的 并且由于它们的状态在构造后不会改变 因此这些不变量总是保持良好状态 这就是为什么它们可以安全地在多线程环境中发布 这一切都很好 但是由于我们生活在一
  • 从 .NET 程序与 ffmpeg 交互 - 写入输入

    在参照this问题 正如您所看到的 我设法运行该程序并从该程序接收数据 然而 我没有设法向它提交数据 例如 在转换文件时 按q立即停止转换并停止程序 我需要我的应用程序也支持停止该过程 我认为这应该通过将此参数传递给 ffmpeg 应用程序
  • 在 PrimeNG 中单击多选下拉列表内的字段时禁用多选下拉列表关闭

    我正在处理一个使用 PrimeNG 多重选择的需求 该多选有复选框 后面跟着一些文本和徽标 单击徽标后 我将在弹出窗口中显示一些数据 单击弹出窗口的 确定 按钮时 背景多选将关闭 其中我需要禁用单击徽标时关闭弹出窗口 这里是 stackbl
  • 将通用应用程序作为缩放的 iPhone 应用程序运行?

    我已经看到了大量有关将 iPhone 和 iPad 应用程序合并为通用应用程序的问题和答案 但这不是我想要做的 我要做的是在应用程序购买中使用来解锁 iPad 界面 然后使用条件显示正确的界面 如果购买了该界面 应用程序将显示 iPad 笔
  • Firefox 中的 window.onbeforeunload 支持

    我在 JavaScript 中使用 window onbeforeunload 这在 IE 中完美运行 但在 Firefox 中不会触发 我检查了 stackoverflow 中的不同链接 在其中我读到 firefox 不支持 window
  • 强制对声明进行函数评估

    我有一个函数f x y z Limit g x eps y z eps gt 0 我绘制f x y z 在下一步中 早些时候 我曾经评估极限并复制定义中的表达式f 我试图一步完成这一切 然而 只有当我尝试绘制时 才会对极限进行评估f 因此
  • 将 jQuery流沙与 fancybox 结合使用时出现问题

    我正在使用流沙 jQuery 的这个例子 制作精美的 HTML5 作品集 现在 我想在单击图像时打开灯箱 为此 我使用 fancybox jQuery 但问题在于这个 Making a Beautiful HTML5 Portfolio q
  • 由外键控制的值

    我在 SQL Server 中有一个非常简单的数据库 包含以下三个表 Theater ID is3D 其他值 Show ID Theater ID Movie ID date time 其他值 Movie ID is3D 其他值 我想确保3