有没有办法在 E-R 图中表示元组与 table 之间的关系?

Is there a way to represent relationship between a tuple and to a table in E-R diagram?

我知道这听起来有点荒谬,但我怀疑如果我们可以表示两个 table 之间的关系,那么这两个 table 的数据是如何相关的,有没有一种表示关系的方法,例如,每个注册用户都有一个单独的 pagelikes table。为了更清楚地说明我的疑问,让我这样解释,学生报名参加了一些课程,比如c,c++,java或其他。那么,我们可以说:

学生 -(注册)- 课程

这意味着学生 x 可以注册 c、c++、java 或课程可以由 1 个或多个学生注册。

以同样的方式,我们能否以某种方式表示注册用户 1 为他或她创建了 pagelikes_1 table 的关系?

样本图片: user profile

pagelikes of that user]1

TL;DR
您的问题或多或少是必须在 DDL(数据定义语言)与 EAV(实体属性值)之间做出选择的规范情况。

如果可以就用一​​个table

通常,您会得到一个 table,它是您正在谈论的所有 table 的并集。至于招生。

// student [student] is enrolled in [course]
Enrolment(student,course)
PK (student, course)
FK (student) to Student (student)
FK (course) to Course (course)

// user [user] likes page [page]
Likes(user,page)
PK (user, page)
FK (user) to User (user)

没有标准的 ER 方法来指示每个实体实例的 table,即每个实体实例的关联集。那是因为你通常会有一个喜欢的页面 table,至于注册。

约束用户table和table约table

有 "metadata" table 描述数据库本身。 (详细信息取决于 DBMS。)将有一个 table,我将调用 Table,其中有一列我将调用 tablename,每个数据库都有一行 table,在 tablename 中保留它的名字。您想要的 "relationship",即约束,可以在 Table 和用户 table 之间表达。 (但不一定在特定的 SQL DBMS 中声明。)

不清楚relationship/constraint您要录制的内容。可能你至少想说,如果一个名字像 Likes_user 的 table 存在,那么它的用户就存在。这不是 ER 图显示的那种 "relationship"/约束,它是 FK(外键)。大多数(但不是全部)SQL DBMS 无法以声明方式表达这一点。是NOT EXISTS(select tablename from Table where tablename like 'Likes_%' except select CONCAT('Likes_', user) as tablename from User).

您可以计算用户的 tablename 并将其存储在用户列 likestablename 中并声明 FK Table (tablename) references User (likestablename)。 (如果您的 DBMS 允许,请将 likestablename 声明为计算列。)如果您可以将可为空的用户列添加到 Table,那么您可以声明 'FK Table(用户)引用用户(用户)。但你不能,因为它是一个系统 table。您可以声明视图,但 SQL 不允许您在视图中声明 FK。

您可能还希望每个 User 用户在 Table tablename 中有一个 tablename。那是 NOT EXISTS(select CONCAT('Likes_', user) as tablename from User except select tablename from Table where tablename like 'Likes_%').

如果 Table tablename 值就像 User 用户值一样,那么您可以改为声明 FK User(用户)引用 Table (tablename) .由于它们不同,您可以使用 User tablename 技术来声明一个 FK User (tablename) references Table (tablename).

如果您想要这两个约束,那么您希望每个用户在 some[=58] 之间具有完全一对一的关系(即“一对一对应”) =] 两行 tables tables。即使对于 所有 行,在大多数 SQL DBMS 中以声明方式做到这一点也不容易,因为它们不允许 table 之间的双向 FK。通常你可以通过在同一个 table 中将它们配对来处理所有行的情况。 (可能涉及视图。)但在这里你不能,因为 Table 是一个系统 table.

如果您的 Likes_user table 有不同的列,那么它是 DDL 与 EAV

您可能需要在每个 table 中使用不同的列。那么实际上你可以有多个 Likes_user tables 由 DML 和 DDL 管理,这很清楚并且完全使用了 DBMS。但是,如果在这种不同列的情况下 在测试和成本核算后 DDL 不充分,您可以使用单个 table 和多个 tables and/or空列。这些实现了一种技术 "EAV",否则它是一种反模式,因为您失去了很多 DBMS 功能。