Я разрабатываю приложение SaaS с многопользовательской лицензией, и я решил использовать единую БД (MySQL Innodb на данный момент) для данных клиента. Я решил использовать составные первичные ключи, такие как PK (client_id, id). У меня есть 2 способа здесь,Композитные первичные ключи и автоинкремент? Что такое хорошая практика?
1: инкремент "ИД" от себя (от триггера или из кода)
или
2: Make "ID" в качестве автоприращение по MySQL.
В первом случае я буду иметь уникальный идентификаторам для каждого клиента, поэтому каждый клиент будет иметь идентификатор 1, 2, 3 и т.д. .. Во втором случае идентификатор будет расти для всех клиентов. Какова наилучшая практика здесь? Мои приоритеты: производительность, безопасность & масштабирование. Благодаря!
Первый вариант действительно не дает вам многого и должен поддерживаться. Будет ли эта новая таблица иметь отношение 1-много с клиентской таблицей? Что на самом деле делает запись отличной? Если ничего нет, используйте автоинкремент. Это действительно зависит от ситуации. – sgeddes
В качестве последующего комментария к последнему комментарию, является ли клиент_id внешним ключом? То есть он ссылается на существующий идентификатор в таблице клиентов? –
Ваш первичный ключ должен быть только автоинкрементным идентификатором. Не включайте client_id, он не добавляет дополнительной информации.PK (client_id, id) с идентификатором auto_increment для innodb возможен только при добавлении индекса (id), который также не добавит дополнительной информации. И PK (client_id, id) с самоподдерживающимися идентификаторами увеличит накладные расходы, а также не добавит дополнительной информации (например, вы не хотите проверять новую вставку данных путем тестирования, если идентификатор уже существует для обеспечения целостности данных), если вы добавите новая строка, вы просто увеличите id независимо от того, что). Итак: PK (id) и индекс (Клиент). – Solarflare