此场景的 GUID/UUID?还是复合键?或其他

2023-12-24

我目前正在开发一个系统,在某些情况下,该系统需要白天在本地数据库上运行,然后在晚上复制到中央服务器。它cannot所有这些都从一个中央数据库运行,因为本地站点会定期与该数据库失去联系。中央服务器上的数据用于仅查看和报告在总部,因此不需要将任何内容反向复制回站点。

每个“站点”都有一个基于文本的唯一密钥(人工生成)。然而,让数据库设计中的每个表都引用站点键的想法并不吸引人。

这是一个非常精简的模式版本的示例without担心远程复制(这对大多数客户端来说都可以正常工作):-

(为了简单起见,我将仅显示区域表的历史记录表):

[Site]
SiteKey [PK] (Gauranteed 100% unique across all sites text based key)

[User]
SiteKey [FK -> Site]
UserID [PK]

[Area]
SiteKey [FK -> Site]
AreaID [PK]
Description
UpdatedDtm
UpdatedUserID [FK -> User]

[AreaHistory]
Site [FK -> Site]
AreaID [FK -> Area]
Description
UpdatedDtm
UpdatedUserID [FK -> User]
AuditedDtm

[Location]
AreaID [FK -> Area]
LocationID [PK]
Description
UpdatedDtm
UpdatedUserID [FK -> User]

[Sensor]
LocationID [PK / FK -> Location]
SensorNo [PK]
UpdatedDtm
UpdatedUserID [FK -> User]

[Reading]
LocationID [PK / FK -> Sensor]
SensorNo [PK / FK -> Sensor]
ReadingDtm [PK]

这很好,直到我将数据库与中央服务器上的数据库“合并”。显然,我会在位置表中遇到冲突,因为我将数据与其他站点生成的 ID 混合在一起。

我解决这个问题的第一个方法是这样做:

gs 短):

[Location]
SiteKey [FK -> Location, FK -> User] ** ADDED THIS
AreaID [FK -> Area]
LocationID [PK]
Description
UpdatedDtm
UpdatedUserID [FK -> User]

[Sensor]
SiteKey [FK -> Location, FK -> User] ** ADDED THIS
LocationID [PK / FK -> Location]
SensorNo [PK]
UpdatedDtm
UpdatedUserID [FK -> User]

[Reading]
SiteKey [FK -> Sensor] ** ADDED THIS
LocationID [PK / FK -> Sensor]
SensorNo [PK / FK -> Sensor]
ReadingDtm [PK]

基本上,每个表都有一个 SiteKey,使得每一行对于该站点都是唯一的。

另一种方法是(在某些地方使用 UUID):-

[User]
SiteKey [FK -> Site]
UserUUID [PK]

[Area]
SiteKey [FK -> Site]
AreaUUID [PK]
Description
UpdatedDtm
UpdatedUserUUID [FK -> User]

[AreaHistory]
Site [FK -> Site]
AreaUUID [FK -> Area]
Description
UpdatedDtm
UpdatedUserUUID [FK -> User]
AuditedDtm

[Location]
AreaUUID [FK -> Area]
LocationUUID [PK]
Description
UpdatedDtm
UpdatedUserUUID [FK -> User]

[Sensor]
LocationUUID [PK / FK -> Location]
SensorNo [PK]
UpdatedDtm
UpdatedUserUUID [FK -> User]

[Reading]
LocationUUID [PK / FK -> Sensor]
SensorNo [PK / FK -> Sensor]
ReadingDtm [PK]

请记住,这是被删减的,但它说明了问题。

我可能缺少任何替代方案吗?我考虑过重新映射 ID,但这似乎会带来新的、更糟糕的噩梦。

令人烦恼的部分是,只有极少数情况使用这种方案,其余的则对一个数据库为多个站点提供服务感到满意。然而,想要这种场景的客户是最大的;-)

我想也许我可以只为它们使用 UUID,但这意味着在任何地方创建异常,所以如果我要使用它们,也可以在整个过程中使用它们(必要时)。

如果有什么区别的话,我正在使用 PostgreSQL。

PS, this https://stackoverflow.com/questions/45399/advantages-and-disadvantages-of-guid-uuid-database-keys讨论可能与本案相关。我只是一直想知道是否还有另一种方法,考虑到我有一个很好的有保证的独特 SiteKey。


我或多或少得出的结论是,恕我直言,对于这种情况,使用 UUID 是一种“快速修复”,甚至可能是一种黑客攻击。我决定对我来说,在这种情况下,使用复合键更干净。使用 UUID,我还可以将 SiteKey 预先添加到每个 ID 中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

此场景的 GUID/UUID?还是复合键?或其他 的相关文章

  • Drupal 视图 - 自定义/修改 SQL

    我遇到了 配置文件复选框 模块的问题 该模块存储以逗号分隔的自定义配置文件字段 问题是我是否创建一个视图来按值过滤 SQL 结果最终是这样的 AND profile values profile interests value in Bus
  • 如何避免这两个 SQL 语句之间出现死锁?

    我有两个存储过程在单独的线程中运行 在 SQL Server 2005 上运行 一个过程将新行插入到一组表中 另一个过程从同一组表中删除旧数据 这些过程在表上遇到了死锁DLevel and Model 这是架构 source barrams
  • MYSQL:SQL查询获取自增字段的值

    我有一张桌子 主键是id及其自动递增 现在 当我插入新记录时 我需要获取更新记录的 id 我怎样才能做到这一点 如果我使用查询 select max id from table name 执行后我可以获得id 但我能确定它是刚刚插入的记录的
  • postgresql-按每个元素中的单词对数组进行排序

    有字符串数组 ARRAY CAT CAT DOG CAT DOG Cat 现在我想根据每个元素中的单词数对该数组进行排序 我已经尝试过 但没有取得任何成功 我想要这个输出 ARRAY CAT DOG CAT DOG CAT Cat 我怎样才
  • Slick和bonecp:org.postgresql.util.PSQLException:FATAL:抱歉,太多客户端已经错误

    当我在本地开发应用程序时 我使用以下命令启动我的 play2 应用程序sbt run 我喜欢如何更改代码 然后重新加载浏览器以查看我的更改 在大约 10 次代码更改之后 我收到 postgresql 太多连接错误 见下文 我的数据库连接使用
  • 字符串文字上的 SQL Server T-SQL N 前缀[重复]

    这个问题在这里已经有答案了 这可能是一个菜鸟问题 但我发现了一些 T SQL 查询示例来验证数据库大小SELECT and WHERE clause here http technet microsoft com en us library
  • SELECT DISTINCT HAVING 计算唯一条件

    我已经搜索过这个问题的答案 但找不到如何根据条件获取这个不同的记录集 我有一个包含以下示例数据的表 Type Color Location Supplier Apple Green New York ABC Apple Green New
  • Oracle内置函数元数据

    有没有办法获取 Oracle 内置聚合和其他功能的元数据 例如AVG STDDEV SQRT ETC 我需要知道对象 id 和参数元 In the SYS ALL OBJECTS查看我找不到任何有用的东西 我也尝试过搜索SYS ALL AR
  • 存储过程总是返回0

    我试图从存储过程获取返回值 但它总是返回 0 c code cmd new SqlCommand cmd CommandType CommandType StoredProcedure cmd CommandText AbsentEntry
  • ORACLE:未找到数据——但数据存在

    调试包过程 当实际上有数据时却找不到数据 仅测试 SELECT SELECT trim trailing from GL SECURITY as DUMMY FROM b2k user b2k WHERE sms username FUCH
  • 显示一个表中的所有记录以及另一表中的匹配记录

    您好 我有一张下表 其中记录了活动和积分 Activites A ID Site ActivityValue ActivityName 1 site1 7 ActivityName1 2 site1 6 ActivityName2 2 si
  • Postgres 平均值计算忽略 null

    这是我的 postgres 表 name revenue John 100 Will 100 Tom 100 Susan 100 Ben 5 rows 在这里 当我计算平均收入时 它返回 100 这显然不是这种情况 而总和 计数 即 400
  • 在 Access 数据库中对列包含数字和字母的数据进行排序

    请帮助我 因为我一直无法做到这一点 选择此列 columnA 的访问 SQL 是什么 以便它返回一个结果集 其中的不同值首先根据数字排序 然后根据字母排序 这是列值 10A 9C 12D 11G 9B 10C 9R 8T 我尝试过 从 tb
  • db2中如何删除所有非数字字母

    我在 DATA 列 varchar 中有一些数据 如下所示 Nowshak 7 485 m Maja e Korabit Golem Korab 2 764 m Tahat 3 003 m Morro de Moco 2 620 m Cer
  • 日志中每天的每周活跃用户数

    我想知道是否有人可以帮助我使用一些 SQL 来返回两天或更长时间内登录到数据库表的唯一用户数量 让我们使用 7 天作为参考 我的日志表在每一行中包含时间戳 ts 和 user id 表示该用户当时的活动 以下查询返回此日志中的每日活跃用户数
  • 如何从 SQL Server 中的 SELECT 进行更新?

    In SQL服务器 可以将行插入到带有INSERT SELECT陈述 INSERT INTO Table col1 col2 col3 SELECT col1 col2 col3 FROM other table WHERE sql coo
  • Postgres 中 -Infinity 和 Infinity 的适当值

    在一种情况下 我们必须在 Postgres DB 中存储 无穷大和 无穷大的值 应该考虑什么合适的值 如果没有 请建议最合适的替代方案 你实际上可以使用 infinity and infinity for FLOAT4 and FLOAT8
  • 具有多个主键的 SQLAlchemy 不会自动设置任何

    我有一个简单的表 class test Base tablename test id Column Integer primary key True title Column String def init self title self
  • Oracle - 获取星期几

    今天是星期二 为什么当我运行这个 SQL 语句时 它说今天不是星期二 SELECT CASE WHEN TO CHAR sysdate Day Tuesday THEN Its Tuesday ELSE Its Not Tuesday EN
  • SQL Server 中的嵌套事务

    sql server 允许嵌套事务吗 如果是的话那么交易的优先级是什么 来自 SQL Server 上的 MSDN 文档 嵌套交易 http msdn microsoft com en us library ms189336 SQL 90

随机推荐

  • 将派生类转换为基类

    我正在尝试刷新我的记忆 但无法通过 Google 找到答案 public class BaseClass public virtual void DoSomething Trace Write base class public class
  • Docker:连接期间出错

    每当我尝试使用 RSelenium 包时 我都会收到上述错误 shell docker run d p 4445 4444 selenium standalone chrome docker error during connect Pos
  • 将 DAO 注入构造函数是否被认为是不好的做法?如果是这样,为什么?

    我有一个 DAL 数据访问层 但这个问题也与 DAO 相关 它与 android 中的静态 Web 服务进行通信 除了我不想包含大量静态库之外 它的相关性较小 交互并不那么复杂 我有一个对象 它包装一个列表 该列表由来自该数据访问层的信息填
  • 为什么我不能通过 import scipy as sp 来使用 sp.signal? [复制]

    这个问题在这里已经有答案了 我想用scipy signal lti and scipy signal impulse函数来计算传递函数 我导入scipy模块按以下方式 import scipy as sp import numpy as n
  • 使用 pytest-asyncio 测试 FastAPI 路由时出现“RuntimeError:事件循环已关闭”

    我收到错误 运行时错误 事件循环已关闭 每次我尝试在测试中进行多个异步调用时 我已经尝试使用其他 Stack Overflow 帖子中的所有其他建议来重写event loop固定装置但没有任何作用 我想知道我错过了什么 运行测试命令 pyt
  • 在 odoo 10 中向状态栏添加颜色

    需要在odoo10中的状态栏添加颜色 哪些可用的openerp版本 例如
  • 一种数据结构,其中键为单词簇,值为单个单词或字符串

    我想创建一个能够将一组或一组单词映射到单个单词或字符串的数据结构 它可以被认为是 python 中字典的反向操作 您可以使用常规字典 targetword good wordmap best targetword positive targ
  • PHP MYSQL 博客存档菜单(按年和月)

    我正在寻找一种有效的方法将所有博客文章整理到以下格式的菜单中 2012 八月 6 九月 4 十月 2 Month 代表月份 显然 括号内的值代表该月的帖子数 单击后 将搜索该月 该年的所有帖子 我需要它是动态的 当该月创建帖子时自动选取 1
  • useSWR 不适用于异步获取器功能

    我正在使用 SWR 获取数据来填充表 我正在使用以下代码 const data items error useSWR fetchAllItems name fetchAllItems fetcher 函数看起来像这样 async funct
  • graphql查询SQL父子关系

    我有一个 postgres 表 它表示具有父子表的层次结构 表 类别 id name parentId 1 CatA null 2 CatB null 3 CatC 1 4 CatD 1 5 CatE 3 期望的结果 categories
  • 如何使用字典从嵌套 json 创建 pandas 数据框

    我正在尝试创建一个 pandas 数据框形式的 json 文件 我已经看到了这个问题的多种解决方案 它们使用内置函数 from dict json normalize 但我无法将其应用到我的代码中 以下是我的数据在 json 文件中的结构
  • DotNetOpenAuth:如何实现一个简单的 OpenId 提供程序?

    每个 OpenId 提供商都有一个提供商 Url 例如 Google https www google com accounts o8 id https www google com accounts o8 id Using OpenIdR
  • 如何在表单中放置两个提交按钮

    我在一种表单中有两个提交按钮 我想在两个按钮中调用不同的操作 有没有什么方法可以在不使用 JavaScript 的情况下完成此任务 如果没有 JavaScript 就不可能调用不同的操作 您可以调用相同的控制器操作 并在该操作内使用 nam
  • Apache POI XWPF:如何创建一组线?

    我是 Poi 的新手 我尝试用画线制作一组形状复合材料 在 LibreOffice 文档上我可以制作 但使用 Poi 似乎更困难 例子 里面没有关于形状的内容apache poi s XWPF除了到目前为止的图表 但是还有com micro
  • 循环遍历 Ruby on Rails 中的对象属性

    Rails 中是否可以循环对象的属性 我有一个对象 而不是对视图中的每个属性进行编码 我想在视图中输出它们中的每个属性 因为它们有很多 我有一个名为 work profile它有很多属性 主要是布尔复选框值 编辑 我知道我可以使用 work
  • 如何在专注于开发工具的同时在 Electron 应用程序中切换开发工具?

    我想让我的 Electron 应用程序切换开发人员工具以响应 F12 在渲染器页面中 我添加了 const currentWebContents require electron remote getCurrentWebContents w
  • 书店应用程序的推荐系统

    嘿 我正在尝试学习 Amazon com 等网站中使用的一些推荐算法 所以我有这个简单的 java spring hibernate postgres 书店应用程序 其中 Book 具有属性标题 类别 标签 作者 为了简单起见 书中没有任何
  • 在 R 中的 .Options$repos 中列出多个存储库有何影响或价值?

    我注意到这个答案 https stackoverflow com questions 1189759 expert r users whats in your rprofile 1349232 1349232关于 Rprofile 设置的问
  • 什么是文档类型?

    什么是 DOCTYPE 为什么要使用它 我可以使用哪些不同的 DOCTYPE 标准模式和怪癖模式之间有什么区别 使用不同设置的 DOCTYPE 可能会遇到哪些怪癖 最后 我应该使用的正确 DOCTYPE 是什么 基本上 DOCTYPE 描述
  • 此场景的 GUID/UUID?还是复合键?或其他

    我目前正在开发一个系统 在某些情况下 该系统需要白天在本地数据库上运行 然后在晚上复制到中央服务器 它cannot所有这些都从一个中央数据库运行 因为本地站点会定期与该数据库失去联系 中央服务器上的数据用于仅查看和报告在总部 因此不需要将任