有什么方法可以在E-R图中表示元组和表之间的关系?[英] Is there a way to represent relationship between a tuple and to a table in E-R diagram?

本文是小编为大家收集整理的关于有什么方法可以在E-R图中表示元组和表之间的关系?的处理方法,想解了有什么方法可以在E-R图中表示元组和表之间的关系?的问题怎么解决?有什么方法可以在E-R图中表示元组和表之间的关系?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

学生 -(注册)- 课程

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

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

示例图片:用户个人资料在此处输入图片描述

该用户的页面喜欢]1

推荐答案

TL;DR
您的问题或多或少是必须在 DDL(数据定义语言)与 EAV(实体-属性-值).

如果可以,请使用一张桌子

通常,您会拥有一张表,它是您正在谈论的所有表的并集.至于招生.

// 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 方法来指示每个实体实例的表,即每个实体实例的关联集.那是因为您通常会有一个喜欢的页表,用于注册.

约束用户表和关于表的表

有描述数据库本身的"元数据"表.(详细信息取决于 DBMS.)将有一个表,我将其称为 Table,其中有一列我将称为 tablename,每个数据库表都有一行,在 tablename 中保存其名称.您想要的"关系",即约束,可以在 Table 和 User 表之间表达.(但不一定在特定的 SQL DBMS 中以声明方式.)

目前尚不清楚您要记录什么关系/约束.可能您至少想说,如果存在名称为 Likes_user 的表,那么它的用户就会存在.这不是 ER 图显示的那种"关系"/约束,它们是 FK(外键).大多数(但不是全部)SQL DBMS 无法以声明方式表达这一点.它是NOT EXISTS(select tablename from Table where tablename like 'Likes_%' except select CONCAT('Likes_', user) as tablename from User).

您可以计算用户的表名并将其存储在用户列 likestablename 中并声明一个 FK Table (tablename) references User (likestablename).(如果您的 DBMS 允许,将 likestablename 声明为计算列.)如果您可以将可为空的用户列添加到表,那么您可以声明"FK 表(用户)引用用户(用户).但是你不能,因为它是一个系统表.您可以声明一个视图,但 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 表名值与 User 用户值一样,那么您可以改为声明 FK 用户(用户)引用表(表名).由于它们不同,您可以使用 User 表名技术来声明一个 FK User (tablename) references Table (tablename).

如果您想要这两个约束,那么您希望每个用户在 一些 行之间有一个精确 1 到精确 1(即"1 到 1 对应")表表.即使对于 all 行,在大多数 SQL DBMS 中以声明方式执行此操作也不容易,因为它们不允许在表之间双向进行 FK.通常,您可以通过将它们配对在同一个表中来处理所有行的情况.(可能涉及视图.)但在这里你不能,因为 Table 是系统表.

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

您可能希望每个表中有不同的列.那么实际上您可以拥有多个由 DML 和 DDL 管理的 Likes_user 表,这很清楚并且完全使用 DBMS.但是,如果在这种不同列的情况下在测试和计算成本后 DDL 是不够的,您可以使用单个表以及多个表和/或空列.它们实现了一种"EAV"技术,否则它是一种反模式,因为您失去了很多 DBMS 功能.

本文地址:https://www.itbaoku.cn/post/1793972.html