sql - 什么是表示多个链接在一起的对象的 SQL Server 数据结构?
问题描述
假设我在 SQL Server 数据库中有两个表:dbo.Companies
和dbo.Contracts
.
假设我想表示公司和合同之间的一对一关系,以表明合同已授予公司。dbo.Companies
我会简单地创建一个带有和的外键的连接表dbo.Contracts
。
对于任何有经验的 SQL 开发人员来说,上述场景都很容易。
假设我想做类似的事情,但是每家获得合同的公司都可以分包给另一家公司,后者可以进一步分包。
我可能有一家名为“Acme”的公司,它可能分包给“Evil Geniuses”,它可能分包给“Evil on a Budget”。
或者再一次,我“Acme”可能分包给“Evil Geniuses”,后者分包给“Evil on a Budget”,但“Acme”可能同时将同一合同的另一部分分包给“Falling Anvils”。
必须记住,一家公司可能涉及许多不同级别的不同合同,或者系统中可能有一些公司根本没有获得任何合同。
什么样的数据结构可以让我在 SQL 中描述这些关系?
编辑:我正在使用 MS SQL Server。
解决方案
与一对一(或一对多)关系相同就足够了。
SQL 允许递归遍历此类关系。
我没有测试以下查询,但它应该给你一个基本的想法。
WITH RECURSIVE ContractHolders AS (
SELECT * FROM dbo.Companies AS m
JOIN dbo.Contracts AS n ON m.id = n.ContractHolderId
WHERE m.name = 'Acme'
UNION ALL
SELECT m.* FROM ContractHolders AS h
JOIN dbo.Companies AS m ON m.id = h.ContractRecipientId
JOIN dbo.Contracts AS n ON m.id = n.ContractHolderId
)
SELECT * FROM ContractHolders;
我猜您使用 Microsoft SQL Server 是基于您对dbo.
Read Recursive Queries Using Common Table Expressions的使用以获取更多信息。
推荐阅读
- python - 如何从 Python Flask API 返回图像流和文本作为 JSON 响应
- python - SQLAlchemy:一直创建引擎会影响性能?
- python-3.x - 我正在尝试写一个计算器
- reactjs - React:可以将 redux 存储和状态存储到本地文件中吗?
- python - POST 请求在 Python 烧瓶服务器上给出 405 错误
- nlp - 如何获得扩展查询的准确性(用户输入扩展查询以获得更好的 IR)?
- python - 如何处理错误消息 - 缺少必需的依赖项 ['numpy'] - 使用 pycharm 和 anacoda
- angular - Angular 中 LoadChildren Route 中的箭头函数与字符串路径
- python-3.x - 在 pyspark 的 RDD 中递归获取所有可能的组合
- javascript - 招聘平台-搜索功能