Mysql 相同值但处于不同状态/问题的单个或多个ID

Mysql 相同值但处于不同状态/问题的单个或多个ID,mysql,database-design,Mysql,Database Design,我有一个查找值“未读”。这里使用的是: 邮件可以读也可以不读。(所以我有ID10=已读,ID11=未读)。现在在UI中,我有了显示过滤器,我可以通过预定义的过滤器对消息进行排序,其中一个是“未读”,所以问题是:在这两种情况下,ID都是11,还是我为未读创建了两个单独的值-一个用于消息状态,一个用于显示排序 此数据的使用是2倍: 1) 根据FK查找ID引用其主要操作 2) 报告:如果我想查看有多少用户使用未读邮件的未读过滤器进行排序,在这种情况下,我可以通过使用两个ID(每个问题一个ID)(消息状

我有一个查找值“未读”。这里使用的是: 邮件可以读也可以不读。(所以我有ID10=已读,ID11=未读)。现在在UI中,我有了显示过滤器,我可以通过预定义的过滤器对消息进行排序,其中一个是“未读”,所以问题是:在这两种情况下,ID都是11,还是我为未读创建了两个单独的值-一个用于消息状态,一个用于显示排序

此数据的使用是2倍:
1) 根据FK查找ID引用其主要操作

2) 报告:如果我想查看有多少用户使用未读邮件的未读过滤器进行排序,在这种情况下,我可以通过使用两个ID(每个问题一个ID)(消息状态和显示排序)轻松获得该数字或仅一个ID?

已读/未读的状态值是消息项的属性,而不是GUI或用户的属性。用户选择的筛选器状态是用户的属性,而不是消息的属性

如果在这两个相似但独立的代码列中使用相同的值对您来说是有意义的,那么就可以了

您需要将消息状态存储为消息上的一列(除非您希望跟踪消息状态的历史记录,在这种情况下,它必须进入消息的子表)。您需要为用户表上的每个用户存储当前筛选器选择状态。我无法想象您为什么要将其历史化,以便用户表上的一列就可以完成此操作


如果消息表中的未读为“11”,用户表中的未读也为“11”这很好,但这是巧合,您需要小心在代码中对此做出任何假设。当您开始添加其他过滤器组合时,整个方案可能会崩溃,除非您承诺在用户/gui过滤器选择表中有匹配的属性对,以及任何消息attributes与您的筛选选项对齐。

好吧,如果我使用不同的,那么下拉列表中的查找值如何。比如说2011年的“年”查找。它可以是出生年,也可以是公司加入日期。在这两种情况下都是2011年。因此,我假设在这种情况下,即使数据存储在不同的表中,它也是相同的ID?首先,找出w何教授教你为年份分配id号。然后找出它们并用手指戳它们的眼睛。在数据仓库类型的DBs中,使用id表示日期是很常见的,在事务型DBs中也可以这样做。但这值得吗?如果你用它来阻止用户的文本输入,也许是值得的。但是,如果你真的这样做,那就没有什么值得的了ng在两个不同的表中使用ID引用的查找值(在本例中为2011)有两种不同的含义,这是错误的。上下文提供了含义。将问题转过来,如果将值“2011”写入字段a中的db,是否可以将“2011”写入字段B?即使它们的含义不同(例如出生年份和公司加入日期)来扩展Karl的好观点,当你有一个属性在你的业务之外有生命(例如年数),您不需要使用无意义的键对其进行匿名。2011在日期列中总是意味着相同的事情,或者如果不是出于某种原因,那么在找到2011的列的上下文中,它将意味着任何它意味着的事情。不同的列并不意味着数据不可压缩。您不能问谁出生于sinc吗e X加入公司?在两个地方拥有相同的数据值并不能保证数据意味着相同的东西。