如何在多租户数据库中设置唯一约束

时间:2016-11-28 01:43:47

标签: sql sql-server database-design multi-tenant

这是一个多租户应用。所有记录都有一个客户端ID来分隔客户端数据。客户可以在此表中插入自己的数据并设置自己的唯一约束。每个客户可以在15个字段中的任何一个上设置唯一约束,也可以不设置。因此,在实际表上设置唯一约束将不起作用。

目前,为了检查是否应该插入记录,我们查询数据库以查看记录是否存在。如果它,我们不插入否则我们制作插入。如果在检查和插入之间插入重复记录,则重复项将泄漏到数据库中。有没有办法保证不会插入重复项?

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,由于并行运行的进程之间的时序问题,避免重复插入的一种方法是使用{{1}将{1}}语句中存在行的测试组合在一起}子句。 我建议动态SQL是一种可能的解决方案,但这里是使用位掩码的替代方法,如果客户端的约束设置存储在数据库中,它可能对您有用。我做了一些假设,所以这可能对你没有帮助。

请注意,此代码简化为仅使用三列(而不是OP中提到的十五列)。如果您决定生成它,最好将逻辑包装在存储过程中。

]

可能还值得一提的是,根据客户端数据量的不同,您可能很难有效地索引客户端数据表以保持插入性能良好。如果单独INSERT上的索引执行得不够好,请考虑对最常用的唯一列集进行索引。