我有一个中央数据库和一个我正在处理的项目的唯一数据库。中央数据库允许我为用户提供默认选项和数据。
唯一数据库与中央数据库结构匹配,以允许用户拥有自定义数据。我有意见,联合每个相同的表对。
每个视图中的“主键”字段被设置为我正在使用的dbml(Linq-to-sql)中的主键。然后我将关联添加到dbml中的其他表。
这意味着我不能将两个表都设置为以0为基数进行自动递增,因为主键在唯一的db表中用作“外键”(我知道在这个实例中它们不是严格的外键)
因此,在视图中,我需要每个表对中的所有记录都具有唯一的主键。
我考虑过将唯一数据库pk基数设置为1000000或者其他东西,但是当全局数据库(0库)赶上时,这最终可能会适得其反。
我也想在视图中为每个人添加一个数字,例如
全球:11,12,13,14,15,16,17,18,19,110,111 独特:21,22,23,24,25,26,27,28,29,210,211
我担心这会在查询时如何影响性能,这必须尽可能高效。
不确定最佳方法?
答案 0 :(得分:0)
实际上有另一个想法:
我可以设置唯一的基础1增量2和全局基数2增量2.这样,没有疯狂的黑客和pk永远不会发生冲突
答案 1 :(得分:0)
您的解决方案的一个问题是它很脆弱,如果您需要合并两个以上的来源,它会失败。根据您的业务情况,这可能是也可能不是现实风险。
人们有时会通过使用GUID作为候选键来解决此问题。通过这种方式,源数据库将IDENTITY列作为PK,并且还具有GUID,该GUID在源数据库中是唯一但不是主要的。但是,在合并视图中,PK是GUID,原始源键(IDENTITY)用于骑行,但实际上并未用于PK / FK关系。
在这种类型的模型中,合并视图通常还包含某种源代码列,用于指示行的来源。如果执行此操作,则源代码+标识密钥也是合并视图中的候选键。