database-design - 在 SQL 中维护多个数据提供者和迁移方法
问题描述
考虑来自外部提供商的篮球比赛同步。为此,我有两个表,match
表:
+----+----------------------+-----------+-----------+
| id | date | home_team | away_team |
+----+----------------------+-----------+-----------+
| 67 | 2021-07-28 19:45:002 | France | USA |
+----+----------------------+-----------+-----------+
还有一张external_match
桌子:
+-----------------+----+
| external_id | id |
+-----------------+----+
| 8e73rekk0lreppj | 67 |
+-----------------+----+
现在我想引入第二个提供者,它也有这个完全匹配,但具有不同的属性,如国家等。然后,想法是有一个实现“开关”,能够随时改变提供者。我的解决方案是match
通过以下方式更新表:
+----+--------------+---------------------+-----------+-----------+---------+----------+
| id | universal_id | date | home_team | away_team | country | provider |
+----+--------------+---------------------+-----------+-----------+---------+----------+
| 67 | 62fef7b1770a | 2021-07-28 19:45:00 | France | USA | | 1 |
| 68 | 62fef7b1770a | 2021-07-28 19:45:00 | France | USA | Japan | 2 |
+----+--------------+---------------------+-----------+-----------+---------+----------+
然后external_match
表格可能会变成:
+-----------------+----+
| external_id | id |
+-----------------+----+
| 8e73rekk0lreppj | 67 |
| 18072481 | 68 |
+-----------------+----+
现在有一个universal_id
,它id
对于跨不同提供者的完全相同的匹配是唯一的,并且还有一个provider
用于按提供者过滤的列。注意external_id
列中的不同值,因为这些条目来自不同的提供者。然后,按提供者查询所有匹配项:
select * from match
...
where provider = ?
我认为它有效。但是,目前还不清楚如何生成universal_id
match
,除了表之外还有很多实体,比如team
,player
等等。肯定有某种数据匹配逻辑,对吧?但它通常是如何完成的?并在 SQL 方面?
此外,考虑一些由表id
列索引的用户相关数据match
。现在,这个内容需要迁移才能使用universal_id
吗?否则它只会显示是否为其中一个提供者设置了“开关”。
你有什么建议吗?谢谢
解决方案
如果您有一个始终可用的数据库,那么它可能有一个类似的表
匹配(id,prov1id,prov2id)
并且每当您需要匹配 prov1id 和 prov2id 时,您都可以参考此表。如果您需要始终在提供者之间切换,那么您可以发明一个生成唯一可识别密钥的公式,可能分别对比赛地点、时间和团队进行编码,并使用该编码来生成自动匹配的 id。不过,您需要定期同步您的提供者信息,因为在此期间可能已经创建/修改/删除了一些匹配项。
推荐阅读
- amazon-web-services - 从 lmabda 以有限的访问权限在 ec2 中运行 php 文件
- google-apps-script - 工作表上的 Google 脚本 - onEdit 脚本将已编辑的单元格合并到其前面的列
- python - 回归网络:哪个损失函数?
- c# - 在 C# WinForm 项目中移动图片框时如何绘制轨迹
- awk - 如何将更改应用到 AIX 中许多文件的某些行?
- javascript - 使用 axios 将数据发送到输入 ReactJS 中的每个更改
- sql - 如何在 Big Query 的表中计算具有条件的元素
- c# - 当您从另一个 sup 类的子类调用方法时,如何从超类的子类执行方法?
- c# - 部署时的 HttpClient 性能问题
- .net - 天蓝色管道,依赖检查(.net)