【发布时间】: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