在我的数据库设计课程中,我们学习了关系代数和关系微积分。我可以看到关系代数在哪里有用,因为它与 SQL 密切相关。
我们的教授说,在一些 RDMBS 中,关系微积分被用作 SQL 的替代品,其中大部分已不再存在。关系微积分还有实际用途,还是大部分是理论性的?
假设我有一张学生表,其中包含他们的 ID 和成绩:
-----------------
| id | grade |
-----------------
| 1 | 83 |
| 2 | 94 |
| 3 | 92 |
| 4 | 78 |
Run Code Online (Sandbox Code Playgroud)
我如何编写引用最高分的学生的元组关系微积分公式?
我的尝试:
从 SQL 的角度考虑,我会编写一个查询,该查询对表与自身进行笛卡尔乘积,取比其他等级低的每个等级,然后从原始表中减去。但是,在元组关系演算中,不可能在子查询中构建子表,这就是我被卡住的原因。
但是,我在这个方向尝试了一些东西:
{ <id> | ? grade1 ? students (id, grade) ? ? grade2 ? students (id, grade2) ? grade1 > grade2}
Run Code Online (Sandbox Code Playgroud)
我相信这会让我获得较低的成绩,但是我如何从原始学生表中减去所有这些?我不允许将此语句插入到另一个 TRC 查询中。在此先感谢您的帮助!
晚上好!
我正在从以下 UML 类图(不幸的是法语)设计我的第一个实际数据库:
我正在创建它的关系草图,我是这样创建的:
然而,当试图向数据库询问哪些客户从未订购过第一产品时,它会产生一些问题?
确实,我不知道如何在 SQL 中做到这一点,因为Client,Commande和Produit之间似乎没有关系。它给出了以下sql代码:
CREATE TABLE Client (
IDClient INT NOT NULL,
AdresseClient VARCHAR(255)NOT NULL ,
NomContact VARCHAR(255)NOT NULL,
NumeroSIRET VARCHAR(14) NOT NULL,
CONSTRAINT cclient PRIMARY KEY (IDClient)
);
CREATE TABLE Produit (
IDProduit INT NOT NULL ,
PrixVente INT NOT NULL ,
QuantiteEnStock INT NOT NULL ,
CONSTRAiNT cproduit PRIMARY KEY (IDProduit)
) ;
CREATE TABLE Commande (
IDNumeroCde INT NOT NULL ,
Date DATE …
Run Code Online (Sandbox Code Playgroud) postgresql database-design relational-theory relational-algebra relational-calculus
好吧,这是一个 SQL 查询:
select Employee.Name,Department.Name
from Employee,Department
where Employee.Dept_no=Department.No
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一个元组关系演算:
{t|? s ? Employee (s[Name]=t[Name] ^
? u ? Department(u[Name]=s[Name]^u[No]=s[No]))}
Run Code Online (Sandbox Code Playgroud)
我的方法正确吗?如果没有,那么任何人都可以帮助我理解吗?
postgresql ×1