这个问题更多的是关于代码的架构和想法。
问题: 让我们有一个存储所有内容的后端主DB。 然后我们有一个前端本地数据库(SQLLite或类似的),它只存储用户/设备的相关数据。
用户可以在前端创建数据。但是,有几个用户可以同时创建相同类型(即收据),如果我们使用简单的int自动增量PK,后端会发生冲突。
建议的解决方案是: 我们使用复合PK,其中PK包括: - 自动增量整数 -设备编号 - 用户ID
现在,逻辑上,deviceID和userID应该是FK到设备和用户的表,但是由于多种原因,在每个前端设备上存储所有设备/用户是不切实际的/可能的,所以FK使它成为问题
建议的解决方案是在fronnd上省略FK req并仅在后端检查数据完整性,但说实话,我不确定风险/收益是否值得。
有没有人到过这一点和/或在部署之后有一些经验? 你的想法是什么? 非常感谢你。
答案 0 :(得分:0)
维拉德,
我认为您要解决的难题是:设备如何在所有设备上生成唯一的标识符?过去对该问题的回答是创建“全局唯一标识符”(GUID)或“通用唯一标识符”(UUID),其中包含唯一标识信息,例如“设备ID”,“时间戳”和随机数。可以在此处找到IETF执行此操作的标准:RFC4122。
因此,大多数数据库供应商至少提供UUID()或GUID()SQL函数来返回这些唯一标识符之一。顺便说一句,我不知道SQLLite是否提供了一个,但我知道SequelSphereDB确实提供了一个UUID()函数。最终结果是您可以使用这些来为行创建唯一标识符。
因此,不是使用由数字,设备ID和用户ID组成的组合主键,而是具有单个列CHAR(36),其存储在创建行时即时生成的UUID
UUID优点:
UUID缺点: