首页 > 解决方案 > 如何使用外键制作复合键?

问题描述

我有一个CustomerNo表的主键和另一个表的另一个主键ProductNo.Date除了在名为 Order 的第三个表中调用的第三列之外,我还想将它们用作复合键。所以想法是,在 Order 表中,我有一个组合键CustomerNo-ProductNo-Date。(Date作为单独的列)可以在表中重复。但是,复合键组合将保持唯一。我怎样才能做到这一点?

标签: mysql

解决方案


我同意 P.Salmon 的观点,您的表结构似乎并不理想。创建这样的自定义复合键会损害您的搜索性能,因为它不会快速查找索引键(例如,您可能会搜索“昨天下的所有订单”、“特定客户今年的所有订单”,甚至“没有人购买哪些产品。”对于这些搜索中的每一个,您都必须从复合键中解析出正确的信息,这意味着您的 SQL 查询不仅会返回每个结果,而且您​​还必须解析每个结果并确定键为 0015053020200412124523 的项目是否是客户 0530 订单的一部分。

一种替代解决方案是一个表,其中包含对和的Orders单独引用,以及一个日期字段。您还需要表上的自动增量主键,然后您可以利用 SQL 和索引(索引?)的强度进行任何查询。CustomerNoProductNo

MySQL 不像其他一些数据库系统那样直接支持复合键,但在这种情况下,我认为这不会伤害你。至少,您还没有解释为什么您的系统需要复合键而不是外键关系的原因。您可以通过使用存储过程来触发插入或其他几种方法来伪造复合键,但我认为这确实会导致您的数据库在未来难以使用,并鼓励您重新考虑您的数据库设计。


推荐阅读