mysql - ERD 中不共享任何外键的数据库表之间的关系

标签 mysql database database-design foreign-keys erd

考虑以下数据库表的示例:

user ( id [PK], user_name, ... )

comment ( id [PK], u_id [FK], ... )

reportedCommentInfo ( id [PK], c_id [FK], reporting_u_id [FK], date, ... )

admin ( id [PK], user_name, ... )

根据此数据库架构,任何用户都可以发表评论,并可以根据包含辱骂或垃圾邮件 Material 来报告其他用户评论。管理员可以查看用户报告的所有评论的列表,并可以删除不符合设定标准的评论。

在这种情况下,管理员实际上无权访问任何报告的评论,即他们的 ID 不存在于管理表中,但管理员可以访问和管理报告的评论。那么在创建 ERD 时,reportedCommentInfo 和管理表之间会存在关系吗?

即基本上我的问题是,在创建 ERD/数据模型时,我们可以在两个没有任何主键/外键关系的表之间创建关系吗?

或者两个表只有在它们之间具有主键/外键关系时才能关联。

ERD for above example

p.s:任何有关改进数据库模式或 ERD 结构中任何内容的建议都非常受欢迎。

最佳答案

如果任何管理员都可以查看任何评论,则无需对它们之间的关系进行建模。不要将数据建模与系统建模混淆。数据模型只需要对您想要记录的事实进行建模。如果您想跟踪哪些管理员审查了哪些评论,那么您当然可以在它们之间引入关系。但是,您不需要仅仅为了向管理员用户授予对所有评论的访问权限而建立关系。相反,您的应用程序代码可以检查登录用户是否是管理员用户,并根据他们的状态显示不同的按钮或内容。

您问是否“两个表之间只有具有主键/外键关系才能关联”。从关系和实体关系的角度来看,我们不关联表,而是使用表来关联值集。有些集合代表现实世界的事物(例如用户),而另一些集合则代表标签(例如名称)或测量值(例如日期)。任何两组或多组值都可以通过为此目的创建合适的表来关联。外键约束用于指示一列(值集)是另一列(值集)的子集,而不是关联行。有关此主题的更多信息,我推荐一本书,例如 Lex de Haan 和 Toon Koppelaars 所著的数据库专业人员的应用数学

关于mysql - ERD 中不共享任何外键的数据库表之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41199118/

相关文章:

c# - C#/VB.net中数据库实体和对象之间的抽象

objective-c - Mac 应用程序中的数据库选项

mysql - 数据库数据的复制什么时候可以?

mysql - Sequelize - 多对多关联 - 3 个外键

php - 从 mysqli select 返回错误的数值

mysql - 防止基于另一个值 SQL 重复值的最佳方法

java - 是否可以测试流程的事务性?

python - Django,将 HTML 代码存储在数据库中

mysql - : Keeping state of entity in database的最优解

php 和 mysql 查询问题 - 查询不工作