关系数据的模型化

Modelisation of relational data

我是网络开发的新手,希望有更多经验的开发人员的建议。

我必须对基本关系系统进行建模。

我有 3 种类型的数据。

USERS
DESIGNS
PROJECTS

USERS 有 0 - N DESIGNS
USERS 有 0 - N PROJECTS
项目 有 1 - 1 个 用户
项目 有 1 - N 设计

基本上 USER 可以有一个 DESIGNPROJECTS.[=37 的列表=] 并且用户会将一个 DESIGN 关联到一个 PROJECT.

我的问题是:如果用户想要删除 DESIGN 会怎样?
它基本上会从列表中删除设计, 但是,如果一个项目与相同的设计有关系怎么办?

"Has" 没有任何意义。您必须告诉我们 涉及表示实体及其属性的值的关系是什么。例如,对于用户 U 和项目 P 的 relationship/table 和 attributes/columns,它们是如何 相关的,即 table 中有哪些行。用户 U 在项目 P 上工作?用户U反感项目P?不允许项目 P 的用户从事设计 D?项目 P 上的用户 可以在设计 D 上工作吗?您必须非常清楚,更新数据库的人可以获取 可能 进入 table 的所有可能行,并且能够通过查看当前业务情况来判断是否进入table。

这就是更新和查询数据库所需知道的全部内容。更新程序查看当前情况并保留 tables 保存根据每个关系相关的值行。

鉴于关系是什么会出现什么情况,通常只有[=59=的某些组合] 值可以出现 。例如,如果 table 包含 "project P produces design D" 所在的行,并且设计仅由一个项目产生,那么在 table 中将永远只有一行具有给定的 D 值。然而,如果一个设计可以由多个项目产生,那么情况就不会如此。例如,如果 "project P produces design D" 总是暗示 "D is a design",那么如果你从第二个 table 开始 "want to remove a design" d 那么你 也必须要 删除第一个 table 中看起来像 (P, d) 的行。如果他们没有被要求同时删除,那将是一个 error。而如果第二个 table 用于 "design D is stupid",那么从中删除一个设计可能独立于其他 table。但请记住,您不需要知道更新和查询的约束。

我们编写约束来告诉 DBMS 拒绝对不可能出现的数据库状态更新的错误请求。例如 PRIMARY KEY 或 UNIQUE 约束表示在上述情况下每一行都有一个唯一的 D 值。基数只是 一些 有关关系的信息,已确定,因此我们可以告诉 DBMS 关于 的 table 值的限制向上。例如,FOREIGN KEY 约束表示上面 "first" table 中的每个 D 必须在 "second" 中显示为 D。但请记住,了解 关系是什么 会出现什么情况

此外,由于我们经常希望同时更新涉及 FOREIGN KEY 约束的多个 table,因此 SQL DBMS 允许 CASCADES 与它们相关联。这使我们能够简明扼要地声明式地表达这样的事情,如果引用的行被删除,那么所有引用行也应该被删除。