【问题标题】:Either or relational algebra enterprise constraint关系代数企业约束
【发布时间】:2021-03-17 19:04:34
【问题描述】:

我需要定义一个约束,其中预订表中的元组只能在音乐家(音乐家表中的外键属性)或演员(演员表中的外键属性)中具有值,并且必须具有其中之一,但不能两个都。起初我想出了这个解决方案 -

1. select any tuple from booking, call it x;
2. project x's musician column, call it y;
3. project x's actor column, call it z;
4. count(y) + count(z) = 1;

这可行,但也无意中强加了“空”预订的音乐家和演员列不能包含空字符串的约束。我该如何解决这个问题?

附:我知道 count() 并不总是关系代数的一部分,但我可以将其用于此目的。

【问题讨论】:

  • 我不知道如何实现你想要的。我可能只是有一个称为“表演者”的关系,其中一列是表演者的类型(音乐家、演员)。这对预订和表演者之间的关联施加了唯一约束。
  • 有很多 RA(关系代数)。它们在运算符甚至关系是什么方面都不同。给你的定义和参考。例如教科书名称、版本和页码。嵌套的 RA 调用形成了一种编程语言。因此,即使您实际上并没有运行代码,也要尽可能多地提供minimal reproducible example。但是——谷歌“在线运行关系代数”。请展示你能做的部分。请参阅 How to Ask、其他 help center 链接、点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。
  • “选择任何元组”不是代数表达式。你不清楚。约束是条件而不是代数结果——约束中允许什么? PS您似乎希望音乐家减去人是空的,演员减去人是空的,音乐家相交演员是空的。 PS 在给出业务关系(船舶)/关联或表(基础或查询结果)时,请说出其中的一行根据其列值说明了业务情况。 PS您的列表与空字符串有什么关系?请不要说某事有效但无效。用足够多的词来表达清楚。

标签: database relational-database relational-algebra


【解决方案1】:

问题

你面临的障碍是:

  1. 数据分析与问题或过程分析之间没有明确的区分
  2. 求助于关系演算或任何其他理论概念来解决实际(例如数据建模)问题。
  3. 您正在假设所指事物尚未明确定义的依赖关系(或遇到问题)

解决方案

解决办法是:

  1. 首先,对数据进行建模,并且仅作为数据进行建模,而不考虑您需要在任何给定流程中执行的操作
    • 数据模型应该反映现实,现实世界。
  2. 理解和欣赏理论,但使用实际方法实施。也就是说,使用关系数据建模标准IDEF1X 直接进行关系数据建模。
    • 顺便说一句,“有很多 RA”是不正确的:只有一个关系演算,作者 E F Codd 博士。当然,在他之后有很多伪装者,但 Codd 的 RA 是唯一完整的;解决;广为人知;并接受。 philipxy 就是其中之一,他们讨厌 Codd。
  3. 正确完成数据模型。在尝试定义依赖事物之前,合理地定义被引用事物。
    • 在您可以为Booking 专门为{Actor|Musician} 建模之前,您需要为{Actor|Musician} 建模...这是一个Person
    • Person 可以是{Actor|Musician|Both},即。非排他性
    • {Actor|Musician}Booking 必须是独占的。

数据模型

在关系范式中轻松建模。因此,SELECT 简单明了。

IDEF1X/ER 级别(不是 ERD)中的数据模型是:

  • 注意这不是 RA 问题,而是数据建模问题。在两个分层位置。

注意

  • 自 1983 年以来的关系数据建模标准是 IDEF1X。对于不熟悉该标准的人,请参阅短IDEF1X Introduction

  • 有关子类型的完整定义和使用注意事项,请参阅Subtype Definition

【讨论】:

    猜你喜欢
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 2019-03-27
    相关资源
    最近更新 更多