我正在开发具有多租户的SaaS应用程序,并且我决定为客户端数据使用单个数据库(MySQL Innodb)。我选择使用复合主键,如PK(client_id,id)。我有2种方式在这里,复合主键和自动增量?什么是好的做法?
1:增量 “编号” 由我自己(通过触发器或代码)
或
2:制作 “身份证”,通过MySQL的自动递增。
在第一种情况下,我将有独特的的ID为每一个客户,所以每个客户都会有编号1,2,3等。 在第二种情况下的ID将所有客户拓展业务。 这里最好的做法是什么?我的优先级是:性能,安全&缩放。谢谢!
第一个选项确实不会让你非常满意,必须予以维护。这个新表与客户表有一对多的关系吗?究竟是什么让记录显而易见?如果没有,那么使用自动增量。这实际上只取决于情况。 – sgeddes
作为最后一条评论的后续,client_id是一个外键?也就是说,它是否引用客户端表中的现有ID? –
你的主键应该只是自动增量编号。不要包含client_id,它不会添加其他信息。带innodb的auto_increment id的PK(client_id,id)只有在添加一个索引(id)时才可能实现,这将再次不会添加其他信息。而具有自我维护ID的PK(client_id,id)会增加开销,同时又不会添加额外信息(例如,如果您不想通过测试来检查新数据是否已存在以确保数据完整性 - 如果添加新的一行,无论如何你都会增加ID)。所以:PK(id)和一个索引(客户端)。 – Solarflare