Mysql 数据库优化/规范化-外键出现在;“太多”;桌子
我已经做了很多研究,我相信我的数据库在第四个NF中(被告知没有必要再进一步),但仍然感觉有些不对劲 我有一个表中继,其中两个表通过外键引用:RATECARD作为一个中继可用于多个RATECARD(区分有效时间、callplans等);此外,我有一个RATEBUYINGINFO,它基本上是您从中继提供商下载的信息,包含不同目的地和类似目的地的费率信息。显然,随着时间的推移,随着价格的变化,更多的RATEBUYINGINFO对象可以与一个主干相关联,但是RATEBUYINGINFO和RATECARD没有直接连接,只是它们可能引用一个主干,因此我在这两个表中都将TrunkID作为外键 然后,我有基于特定费率卡的销售费率信息(RATESELLINGINFO表),还有目的地信息以及中继信息,所有这些信息都记录在RATEBUYINGINFO表中(不,我不认为将目的地单独列为一个单独的表有什么意义,因为不同提供商提供的不同中继不提供唯一的目的地名称)因此我在RATESELLINGINFO表中使用外键RateCardID和RateBuyingFoId作为外键 现在的问题是,通过这两个外键,最后一个表可以访问两个TrunkID值(一个在RATECARD中,一个在RATEBUYINGINFO中),这两个值应该总是相同的(显然,一个卖出率指的是一个主干),但数据库体系结构不能以任何方式保证这一点。Mysql 数据库优化/规范化-外键出现在;“太多”;桌子,mysql,database-design,optimization,normalization,telephony,Mysql,Database Design,Optimization,Normalization,Telephony,我已经做了很多研究,我相信我的数据库在第四个NF中(被告知没有必要再进一步),但仍然感觉有些不对劲 我有一个表中继,其中两个表通过外键引用:RATECARD作为一个中继可用于多个RATECARD(区分有效时间、callplans等);此外,我有一个RATEBUYINGINFO,它基本上是您从中继提供商下载的信息,包含不同目的地和类似目的地的费率信息。显然,随着时间的推移,随着价格的变化,更多的RATEBUYINGINFO对象可以与一个主干相关联,但是RATEBUYINGINFO和RATECARD
这个问题有一个优雅的解决方案吗?当你问这样的问题时,一定要包括SQL CREATE TABLE语句和一些样本数据作为SQL INSERT语句。SQL比你的注释更可靠,也不那么含糊。(你可以现在编辑你的问题并添加这些内容,以便以后阅读的人能得到更好的答案。) RATECARD表和RATEBUYINGINFO表中的中继id可能都是主键的一部分或这两个表中唯一约束的一部分。如果是,则可以在RATESELLINGINFO中使用重叠外键约束存储一次中继id。类似于
...
foreign key (trunk_id, rate_card_id)
references ratecard (trunk_id, rate_card_id),
foreign key (trunk_id, rate_buying_info_id)
references rate_buying_info (trunk_id, rate_buying_info_id)
...
如果您使用了完整的关系模型,那么无论如何(可能)主干id都会出现在RATESELLINGINFO中
附加提示:从表名中删除“info”一词。所有表都包含info;将其添加到名称中只是噪音