为这个晦涩的问题道歉,用一个具体的例子可能更有意义:
在我的应用程序中,我可能会创建一个包含一组项目的投资组合。但是,我也可以添加一个嵌套在投资组合(然后可能包含项目)中的“子投资组合”。目前,我通过以下方式绘制了我的架构:
+------------+ +-----------------------+ +------------+
| Portfolios | | Portfolio_project_map | | Projects |
+------------+ +-----------------------+ +------------+
| port_id | | parent_id | | proj_id |
+------------+ +-----------------------+ +------------+
| | | child_id | | |
+-----------------------+
| child_is_portfolio |
+-----------------------+
Run Code Online (Sandbox Code Playgroud)
这看起来非常难看。在关系数据库中建模这种关系的正确方法是什么?还是真的没有,这样的细节应该在业务逻辑中严格执行?它甚至有可能对指定的外键约束Portfolio_project_map
,使得child_id
引用要么port_id
还是proj_id
?
另外,这样的问题到底叫什么?我发现在几个地方引用了“一对一”,但我有一种不完全正确的感觉?