【发布时间】:2017-11-08 17:47:49
【问题描述】:
我有一个包含一组 X 预定义记录的表,这些记录随我的移动应用程序一起提供,每条记录都有一个整数自增主键。
现在,我想允许用户添加他们自己的记录。
但是,假设在应用更新时,我想在我的应用中预定义 X+10 条记录。
请记住,自定义记录的主键在其他表中被用作外键。
如何升级我的数据库,同时保持自定义添加的记录外键 ID 在其他表中的一致性,同时保持新的 x+10 主键 ID 与出厂时相同?
【问题讨论】:
我有一个包含一组 X 预定义记录的表,这些记录随我的移动应用程序一起提供,每条记录都有一个整数自增主键。
现在,我想允许用户添加他们自己的记录。
但是,假设在应用更新时,我想在我的应用中预定义 X+10 条记录。
请记住,自定义记录的主键在其他表中被用作外键。
如何升级我的数据库,同时保持自定义添加的记录外键 ID 在其他表中的一致性,同时保持新的 x+10 主键 ID 与出厂时相同?
【问题讨论】:
您希望在严格低于客户端将使用的范围内插入应用程序升级附带的额外十行,这样它们就不会发生冲突,您仍然可以将众所周知的新行分配给数字。
除非您最初创建了一个“死区”,在少数工厂发货的初始行和客户能够分配的第一个 ID 之间为自己保留一个范围,否则您唯一的办法是使用负数执行十个额外的插入。
【讨论】:
如果您使用主键的 AUTOINCREMENT 关键字创建表,则不能重用旧键。您必须添加用户添加记录的副本,然后使用您的预定义数据更新原始记录。您还必须更新链接到这些记录的其他表中的任何外键。
您为什么使用 AUTOINCREMENT?如果您不使用它,如果您不指定键,它仍会自动递增整数键。如果您没有使用 AUTOINCREMENT,您可以更新主键(如果外键设置为更新时级联,则应该更新外键),然后使用您想要的键添加预定义记录。您必须查询以找出当前最大的键是多少,并确保更新后的键大于该键。
为什么关键值很重要?你能设计你的应用程序让他们不这样做吗?添加另一列以供您使用,以供您更好地控制?
【讨论】: