sql - 组织 ID 字段作为复合主键

标签 sql sql-server performance nhibernate database-design

我们目前有一个系统,每个客户在注册时都会获得自己的数据库。毫不奇怪,这种情况已经失控。

我们正在准备将所有这些数据库合并到一个数据库中。为了做到这一点,我们需要记下该行属于哪个组织。如何在数据库上最好地处理这个问题以及以下方法有什么优点/缺点(速度、可维护性等)?

选项 1:将组织 ID 设置为所有表并使其成为主键的一部分(使所有键复合)。

选项 2:将组织 ID 添加到所有表中,作为具有组织表外键的列。

选项 3:其他内容。

我们正在考虑通过这一举措迁移到 NHibernate,如果这对所做的事情有影响的话。

最佳答案

选项 1 和 2 并不相互排斥,您应该同时执行这两个操作。 对组织的外键约束有助于确保您的组织键有效。 复合主键是实现唯一性的唯一方法,除非您想重新设置所有记录的键,并且它对于查找性能也很有值(value)。或者,您必须在组合数据上创建一个新的主键列,例如标识列。这样的更改可能需要在其他地方进行更多更改。

关于sql - 组织 ID 字段作为复合主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/569643/

相关文章:

sql - BigQuery 对 float 进行排序

sql - 更新其他表中没有匹配项的行

java - 将结果集中的每一行存储为数组中的对象

sql - 如何查找存储在 SQL Server 2008 表中的最旧记录?

sql - 如何使用一个 select 语句的结果作为另一个 select 语句的列?

sql - 我怎样才能提高这个存储过程的性能?

sql - Snowflake 中 XML 横向扁平化的意外行为(已过滤 1 个值的行)

sql - SQL Server 格式日期为 '%Y-%m-%d %I:%M%P'/'2012-04-05 11:56am'

mysql - 本地主机上的站点速度快,服务器上的速度慢

java - 多键映射 - 性能比较