SQL-如何跟踪;简单关系“;

SQL-如何跟踪;简单关系“;,sql,relation,table-structure,Sql,Relation,Table Structure,我希望有人能编辑我的标题来更好地描述我的意思,因为我不知道这到底是什么意思。但是,考虑一下这个设置:我想创建一个通知系统,在这个系统中,一个消息显示给用户直到他点击“解散”。然后我需要“记住”这个用户已经拒绝了通知,这样我就不会再给他看了。这是我目前的解决方案 users表有一个uid主键和用户信息 通知表具有nid主键和通知文本 notifications\u已看到带有两列的表,uid和nid 当有人在通知上单击Disclose时,我将他们的uid和通知的nid存储在notificatio

我希望有人能编辑我的标题来更好地描述我的意思,因为我不知道这到底是什么意思。但是,考虑一下这个设置:我想创建一个通知系统,在这个系统中,一个消息显示给用户直到他点击“解散”。然后我需要“记住”这个用户已经拒绝了通知,这样我就不会再给他看了。这是我目前的解决方案

  • users
    表有一个
    uid
    主键和用户信息
  • 通知
    表具有
    nid
    主键和通知文本
  • notifications\u已看到带有两列的表,
    uid
    nid

当有人在通知上单击Disclose时,我将他们的
uid
和通知的
nid
存储在
notifications\u seed
中。这似乎很好,但phpMyAdmin有巨大的红色消息告诉我,
notifications\u seen
没有索引。但是,这两列都不是唯一的。我真的应该在
notifications\u seed
中增加一个完全无用的列,并将其称为主键吗?有更好的方法吗?

您可以使用多个列来创建主键。在这种情况下,您应该将nid和uid设置为通知表中的主键。这里的想法是,即使nid或uid在您的通知表中都不是唯一的;nid/uid对是唯一的。您应该向这两列添加主键约束。这通常是你在这种情况下想要做的

有时,您可能确实希望创建一个自动增量行来简化主键。例如,当您的最佳候选键由许多列组成时(我把它从空中拉出来;但假设有4列或更多列),或者您有包含字符串的列;在进行查找时,匹配速度较慢。但是对于这种情况,只需将主键约束添加到两列就可以了

默认情况下,主键被索引;这就是为什么只需将主键约束添加到两列中。这还将确保不会意外插入具有相同uid/nid对的行,从而保持数据的完整性


您还应该将uid上的外键约束添加到users表中的id,并将外键约束添加到notifications表中的id上的nid。添加外键约束将确保不会在通知表中插入实际上不存在的UID或NID。

您可以使用多个列来创建主键。在这种情况下,您应该将nid和uid设置为通知表中的主键。这里的想法是,即使nid或uid在您的通知表中都不是唯一的;nid/uid对是唯一的。您应该向这两列添加主键约束。这通常是你在这种情况下想要做的

有时,您可能确实希望创建一个自动增量行来简化主键。例如,当您的最佳候选键由许多列组成时(我把它从空中拉出来;但假设有4列或更多列),或者您有包含字符串的列;在进行查找时,匹配速度较慢。但是对于这种情况,只需将主键约束添加到两列就可以了

默认情况下,主键被索引;这就是为什么只需将主键约束添加到两列中。这还将确保不会意外插入具有相同uid/nid对的行,从而保持数据的完整性


您还应该将uid上的外键约束添加到users表中的id,并将外键约束添加到notifications表中的id上的nid。添加外键约束将确保您不会将实际上不存在的UID或NID插入到notifications\u seen表中。

您可以在
notifications\u seen
上创建包含这两列的索引!或者只为主键创建一个单独的列,或者同时执行这两项操作—在
uid
nid
上创建索引可能会加快查询速度(但在您开始注意到主要性能问题之前,不要太担心这一点—以后请记住这一点)。拥有这些n:n关系的主键并不可怕。

您可以在
通知上创建一个包含这两列的索引!或者只为主键创建一个单独的列,或者同时执行这两项操作—在
uid
nid
上创建索引可能会加快查询速度(但在您开始注意到主要性能问题之前,不要太担心这一点—以后请记住这一点)。拥有这些n:n关系的主键并不可怕。

您可以创建一个复合主键(同时包含
uid
nid
)。

您可以创建一个复合主键(同时包含
uid
nid
).

为什么我甚至想要一个索引呢?这和你去没有电脑的图书馆时想要卡片目录的原因是一样的。你是想去看看所有的书,还是只是看看卡片,上面有关于所有书的信息,当你找到你要找的书的时候,这些信息告诉你书在哪里?为什么我甚至想要一个索引?同样的原因,当你去没有电脑的图书馆时,你会想要一个卡片目录。你是想去看看所有的书,还是只是看看卡片,上面有关于所有书的信息,当你找到你要找的书时,这些信息告诉你书在哪里?