sql - 确定关系中的主表和外表?

标签 sql sql-server sql-server-2005 tsql

设计数据库时,什么通常决定哪些表将成为关系中的主表和外表?

例如,如果我有一个名为 posts 的表,它包含 id 列 postid,并且我有一个名为 comments 的表,它包含一个名为 postid 的列。这些表中的哪一个将是关系中的主要表。我认为这是帖子表。我这么说是因为这是一种一对多关系,看起来有一个条目的表将是主表,而有多个条目的表将是外部表。

对于多对多关系或一对一关系,这些场景中的主表和外部表是什么?

最佳答案

主表包含父记录,这些记录定义了根记录,例如本例中的“posts”。

外部表包含子记录,这些记录以相关方式将数据添加到父记录。

因此,“评论”是“帖子”的子项,因此: “Post”是父级(在您的示例中是主要的) “评论”是子项(在您的示例中是外来的)

PostId 值在 Post 表中必须是唯一的... 但相同的 PostId 值可以在 Comment 表中出现多次(因为单个帖子可能有很多评论;评论 1 是针对帖子 1,评论 2 是针对帖子 1)。

1-1 关系是指两个实体是对等的。即学生可以是用户,用户也可以是学生。两个学生不能是同一用户。两个用户不能是同一学生。因此用户 - 学生是 1-1。

多对多关系最好用中间的表来建模。

书籍(小学)
作者(主要)
作者书籍(映射)

BookId 在图书中是唯一的(只有一本书可能有特定的 id)
AuthorId在Authors中是唯一的(只有一个作者可能有某个id)

AuthorBooks 具有 BookId 和 AuthorId 列,并将书籍映射到作者。

之所以对这种关系进行建模,是因为一位作者可能写了很多本书,并且某本书可能有很多作者。

关于sql - 确定关系中的主表和外表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1429407/

相关文章:

sql - 具有两个日期参数的两个日期字段中的条件

mysql - 使用 max() 查询表会产生奇怪的结果

mysql - 如何通过连接从表中检索数据

sql-server - 在值范围层上分配值

.net - DbConnection.Open() 有效,但 dbConnection.OpenAsync() 无效

sql-server - SQL Server ODBC性能损失?

php - 如何在服务器上安全地存储sql dbs

MySQL: bool 值上的 "= true"与 "is true"。什么时候最好使用哪一个?哪一个是独立于供应商的?

sql - SQL Server 2008的填充因子

sql-server - MS SQL Server 2005 将数据从一个表复制到另一个表