mysql - 数据模型问题:如何限定第三个对象
问题描述
我正在处理稍微不同的类型,因此为了清楚我想要实现的目标,我决定使用隐喻。
假设您需要创建描述两个建筑局项目的表格:
第一个只处理 3D 计划 第二个只处理 2D 草图
我有下表
mysql> describe sketch;
+------------------+-------------------------------+------+-----+-------------------+
| Field | Type | Null | Key | Default |
+------------------+-------------------------------+------+-----+-------------------+
| project_id | binary(16) | NO | PRI | NULL |
| company_id | binary(16) | NO | PRI | NULL |
| type | enum('2D','3D','N/A') | YES | |'N/A' |
+------------------+-------------------------------+------+-----+-------------------+
如您所见, project_id 和 company_id 形成 PRIMARY KEY
当在某些特殊情况下,同一家公司在同一项目 ID 下承担 2D 和 3D 任务时,就会出现此问题。
或者同一家公司开始从事两个或多个相同类型的子项目(例如,两者都是 2D 草图),但在我们称之为具有完全相同 ID 的父项目的范围内。
一个快速而肮脏的解决方法是简单地将唯一 ID 添加到上表中,但这对我不起作用,因为有各种报告和其他功能基本上可以做到这一点:SELECT blah FROM sketch WHERE project_id=XXX AND company_id
我可以添加代码来过滤来自上述 SQL 的结果,但我不能真正更改结构或表。
关于我有什么选择的任何想法?
欣赏任何想法!
并提前非常感谢您!
解决方案
As you describe the problem, company/project is not a primary key. You describe circumstances where uniqueness is violated.
Then company/project/type does seem to be a unique key and a candidate primary key. I would say that you should have a numeric primary key and declare the tripartite key as unique.
推荐阅读
- python - Keras(Tensorflow) python 图像分类与分析(根系统)
- sql - Postgresql 中使用触发器的总库存
- java - 使用自定义函数模拟静态 void 方法
- asp.net-core - Asp.Net 核心 ActionFilter 上下文请求正文已处理
- python - 堆叠从 Xarray 生成的 Dask 数组的有效方法
- java - 带有 OAuth 的 Spring Boot Security Multi Http 不起作用
- microsoft-edge - 发布 Microsoft Edge 扩展时如何解决识别问题?
- javascript - 等待函数解决没有参数的承诺
- batch-file - 批量循环变量并发送 API 请求
- ruby-on-rails - 我的市场轨道项目的两个数据库模式之间的困境