我正在開發具有多租戶的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