【问题标题】:Can There be a Table in a Relational Database that Doesn't Have a Relationship to Any Other Table? [duplicate]关系数据库中是否可以存在与任何其他表没有关系的表? [复制]
【发布时间】:2015-10-27 12:41:32
【问题描述】:

我有一个应用程序,其中我将属于 Post 的 PostId 和关键字 (Keyword) 存储在名为 KeywordsForPost 的表中。该表的主键是PostIdKeyword 的组合。 PostId 不是唯一的,Keyword 也不是唯一的。

我需要这个实现,因为我可能需要搜索有关它们包含的关键字的帖子。

我有另一个名为NewKeywords 的表。该表中唯一的一列是Keyword。创建帖子时,该帖子中的关键字将插入到KeywordsForPostNewKeywords 表中。在用户的命令下,对表NewKeywords 中的关键字进行操作,使它们不再成为“新关键字”。所以我在应用该操作后删除了这些关键字。目前我的NewKeywords 表与任何其他表都没有关系。这种做法合理吗?还是有更好的做法?

我搜索并找到了这个答案。 can we have a table without any relation with the other tables
但是没有觉得满意。 我还发现它与之前提出的问题不同,因为它提出了一个一般性问题,而我的问题是具体的。我需要知道是否可以将关系添加到表中。到目前为止,我一无所获。

【问题讨论】:

  • 你对这个答案有什么不满意的地方?
  • 正如您提供的问题中的所有答案所示 - 是的,这样做非常好。仅仅因为您在关系数据库中工作并不意味着所有必须至少相互关联。
  • “关系型数据库”中的“关系型”实际上并不是指表之间的关系(外键),而是指表中单行的相关数据。例如,客户表可能有名字、姓氏、出生日期和地址。这些单独的项目是相关的,因为它们指的是同一个客户。
  • 为什么没有一个带有“New”标志的关键字表,并使用该表的键作为KeywordsForPost的外键?
  • @rlartiga 这听起来很有趣。让我看看它是否适用于我的情况。非常感谢您的回复!

标签: sql database database-design relational-database entity-relationship


【解决方案1】:

是的,你可以。唯一可能发生的是这些表与其他表没有关系。我不会说这是最好的方法,因为一切都取决于你的情况。而且,就像答案所说的那样:以后仍然可以给它一个关系。

【讨论】:

  • 这就是我感兴趣的。如果以后可以给予关系,它们是什么?我挠了挠头,什么都没想出来。
  • 嗨@LilyLakshi,第一件事是尝试了解数据库关系查看此站点,如果您有更多问题,请告诉我,我将在这里等待=)code.tutsplus.com/articles/…
  • @LilyLakshi 看看这个与ALTER TABLE stackoverflow.com/questions/1308339/… 一起使用的正确答案
【解决方案2】:

要么我误读了您的问题,要么 NewKeyWords 和 KeyWordsForPost 之间实际上存在关系。这是两个表共有的值(关键字),可用于关系连接。这可能是一个没有人愿意做的愚蠢的连接,它可能真的很慢,因为缺乏相关的索引,并且关键字不是任何地方的声明键,但它仍然是一种关系。

这种关系是数据中固有的,无论您是否已声明。

【讨论】:

  • 是的。我知道可以加入。我很想知道是否存在一种可以强制执行某种参照完整性的关系。例如,NewKeywords 不应具有KeywordsForPost 中不存在的值。感谢您的回复!
  • 可以连接任意两个表。他们之间不需要 FK。 JOIN 的含义是其参数含义的 AND。 FK 意义上的“关系”就是每个引用子行都显示为被引用子行的事实。 @LilyLakshi 如果那不是真的,那么就没有FK。但是“NewKeywords 的值不应存在于 KeywordsForPost 中”(如果您先更新后者)。因此,“无论您是否已声明,这种关系都是数据中固有的。”
  • 很公平。任何两个表都可以通过笛卡尔连接进行连接。我的意思是等值连接,但我没有仔细措辞。我关于关系存在的观点是参考假定的主题的 ER 模型,而不是参考数据库设计的关系数据模型。在我习惯的措辞中,未声明的 FK 仍然是 FK。
  • @Lily,您是否担心孤立引用?如果是这样,请强制执行 RI。如果没有,请不要担心。
  • @WalterMitty 单独看到那张桌子感觉不对。是的,我想强制执行 RI。但是稍微研究一下这个让我相信,在这种特殊情况下,这没什么大不了的。感谢您的回复!
【解决方案3】:

我将采用@rlartiga 的方法,伙计们。我将创建一个带有Keyword 列的Keywords 表,并将其作为主键。然后我将让KeywordsForPostNewKeywords 表在Keywords 中引用Keyword。谢谢你们的支持!如果您认为这不合适,请发表评论。

【讨论】:

    猜你喜欢
    • 2014-01-30
    • 2018-08-18
    • 2020-09-13
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多