实体与抽象数据库关系

Entities vs Abstract Database Relationship

我知道这对互联网上的所有人来说都是一个多余的问题。但是我想对定义数据库关系有一个简单明了的解释。

  1. Should database relationship depends on actions? (A User can create Post, A user can like a Post, etc.)
  2. Should database relationship depends on the related entities. (An event has many post, Every event is associated with many post and likes. A user has a post in an event)

这不是一个多余的问题。一般的数据模型,尤其是实体关系模型,通常都很少被理解,大多数在线教程、博客文章和产品文档充其量只是半真半假。

关系用于记录个人或系统需要跟踪的任何关联。这里的重点是知识,数据库用于记录、操作和导出个人或系统感兴趣的信息。关系只不过是涉及一个或多个实体的事实。

您的系统是否需要记住允许哪些用户创建 post 或喜欢 post,或者哪些用户实际做了这些事情(以及他们做了什么 post他们)?它是否需要知道哪些 post 属于哪些事件,哪个用户在哪个事件中有哪个 post?所有这些都是有效的例子。

基本上,任何带有占位符的句子都是谓词,例如用户 [user_id] 喜欢 post [post_id]。当您用值替换占位符时,您会得到一个单独的关系,也称为命题或事实。通常使用 "relationship" 也表示关系集,即具有相同谓词语句的任意数量的个体关系,这就是数据库中的表所表示的。

请注意,关系不是由数据库中的外键约束表示的。这是一个经常在网上传播的常见误解,甚至应该更了解的流行 DBMS 供应商也是如此。