首页 > 解决方案 > 数据模型问题:如何限定第三个对象

问题描述

我正在处理稍微不同的类型,因此为了清楚我想要实现的目标,我决定使用隐喻。

假设您需要创建描述两个建筑局项目的表格:

第一个只处理 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 的结果,但我不能真正更改结构或表。

关于我有什么选择的任何想法?

欣赏任何想法!

并提前非常感谢您!

标签: mysqlsqlmodel

解决方案


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.


推荐阅读