mysql - 如何使用外键制作复合键?
问题描述
我有一个CustomerNo
表的主键和另一个表的另一个主键ProductNo.
。Date
除了在名为 Order 的第三个表中调用的第三列之外,我还想将它们用作复合键。所以想法是,在 Order 表中,我有一个组合键CustomerNo-ProductNo-Date
。(Date
作为单独的列)可以在表中重复。但是,复合键组合将保持唯一。我怎样才能做到这一点?
解决方案
我同意 P.Salmon 的观点,您的表结构似乎并不理想。创建这样的自定义复合键会损害您的搜索性能,因为它不会快速查找索引键(例如,您可能会搜索“昨天下的所有订单”、“特定客户今年的所有订单”,甚至“没有人购买哪些产品。”对于这些搜索中的每一个,您都必须从复合键中解析出正确的信息,这意味着您的 SQL 查询不仅会返回每个结果,而且您还必须解析每个结果并确定键为 0015053020200412124523 的项目是否是客户 0530 订单的一部分。
一种替代解决方案是一个表,其中包含对和的Orders
单独引用,以及一个日期字段。您还需要表上的自动增量主键,然后您可以利用 SQL 和索引(索引?)的强度进行任何查询。CustomerNo
ProductNo
MySQL 不像其他一些数据库系统那样直接支持复合键,但在这种情况下,我认为这不会伤害你。至少,您还没有解释为什么您的系统需要复合键而不是外键关系的原因。您可以通过使用存储过程来触发插入或其他几种方法来伪造复合键,但我认为这确实会导致您的数据库在未来难以使用,并鼓励您重新考虑您的数据库设计。
推荐阅读
- dart - 在dart中抓取网页时如何获取href属性的值?
- python - Python为什么我的变量leap_counter返回UnboundLocalError错误信息?
- php - 在 Azure 应用服务 (WebApp) 中启用 PHP 日志记录
- mysql - 更新语句 MySQL 连续字段
- python - Python 中的 Classifier.predict
- jquery - jQuery - clone() 不是一个函数
- javascript - 在 Web 浏览器 Javascript 上导入 IO 模块
- arduino - Arduino上的软件串行通信得到了我不发送的东西
- php - 指导我如何在单个页面/文件上启用多域屏蔽
- python - 在 Python 中将字符串旋转一个字符的更好做法是什么?