gpt4 book ai didi

mysql - SQL 设计模式 : how do I store multiple unique ids from different sites in mashup?

转载 作者:可可西里 更新时间:2023-11-01 08:57:29 25 4
gpt4 key购买 nike

我正在构建一个混搭来存储来自多个 REST API 数据源的项目的元数据。我希望能够根据跨所有不同数据源汇总的数据生成典型的提要(最新的、评价最高的、观看次数最多的等),并添加标签(即多对多关系)。

我的问题是每个数据源都有不同的方式通过它们的 REST API 发布唯一 ID。我需要有关用于我的 MySQL 数据模型的最佳模式的建议。

我目前的解决方案是为所有项目使用 1 个表和一个复合键,但连接很长,而且 cakePHP 本身不处理复合键:

datasource_id smallint,  
datasource_item_id VARCHAR(36), // some datasources issue alpha keys

问:向我的表添加一个自动递增主键并将我所有的内部连接/索引从外部 UID 转换为我的内部 UID 是否可以/更好? :

id int(10) unsigned NOT NULL auto_increment,

问:枚举是存储 datasource_id 的有效数据类型吗(可能应该有 10 个不同的数据源)?

问:从长远来看,还有其他方法可以产生更好、更具可扩展性的结果吗?

最佳答案

大多数情况下,我只能确认您已经考虑过的解决方案。

由于表模式中使用的存储类型不必与数据类型相同(这就是为什么 SQLite 2 是 untyped 而 SQLite 3 是 so few types ),我的第一个冲动是与您当前的解决方案相同。

遵循另一种思想流派,即任意 ID(即那些不基于您正在建模的属性的 ID)应该保留在您自己的数据库内部,建议您提到的第二个解决方案:添加一个 id 列。这所学校的一个原因是您不希望您的表依赖于其他人的内部结构,尽管这在这里不太重要。由于 cakePHP 不支持复合键,这似乎是最可行的选择。

另一种解决方案是让主键列成为来自其他复合键列的数据的串联。也就是说,添加一个额外的列,与自动递增 ID 一样,但存储非任意值的列。这属于反规范化的范畴,并具有暗示的所有注意事项和警告。

如果 SQL 是二阶逻辑,您可以轻松地为每个数据源提供自己的表。由于 SQL 是一阶命令,因此这不是一个可扩展性很强的解决方案。

前三个都有一个缺点。每个数据源都有自己的 ID 类型;当在同一列中存储来自不同来源的 ID 时,您需要定义额外的约束以在数据库级别强制执行类型完整性,可能以触发器的形式(因为 MySQL 不支持 CHECK 子句) .

Q: Are enums an efficient datatype for storing datasource_id (should have maybe 10 different datasources)?

storage requirements对于 ENUM 是 1 或 2 个字节,具体取决于有多少不同的值。在十个数据源中,每行只能使用一个字节。这仍然浪费了 4 位/行多一点。它是否有效,我会留给你。

关于mysql - SQL 设计模式 : how do I store multiple unique ids from different sites in mashup?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2174537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com