Лучшая практика для PK в SQL Server

Ваши запросы к DynamoDB истекают из-за того, что вы запускаете свою функцию Lambda в VPC, но вы не предоставляете ни шлюз NAT, ни конечную точку VPC , чтобы позволить функции Lambda получить доступ к существующей DynamoDB вне вашего VPC.

Я рекомендую настроить конечную точку VPC на DynamoDB.

7
задан Russ Bradberry 7 February 2009 в 17:22
поделиться

5 ответов

Стандартная процедура для этих случаев должна иметь два индекса. Уникальный PK является этими двумя полевыми составными объектами с полем с большей кардинальностью сначала, т.е. UserID; и второй индекс только с вторичным полем (т.е. RoleID).

Затем кластер на том, какой бы ни, вероятно, будет вовлечен в более мультирекордные наборы результатов (т.е. при запросах для нескольких ролей на пользователя или многочисленных пользователей на роль).

10
ответ дан 6 December 2019 в 19:43
поделиться

Объявите PK как (UserID, RoleID). (Отметьте: порядок важен),

Объявите UserID как FK со ссылкой на таблицу Users. Объявите RoleID как FK со ссылкой на таблицу Roles.

С любой удачей Ваш DBMS даст Вам сводный индекс на (UserID, RoleID) в том порядке.

С любой удачей это ускорит соединения между пользователями и ролями. Хороший DBMS даст Вам слияние для соединения без ограничений кроме условия объединения. Тремя путями соединение должно работать довольно быстро также, предполагая, что количество ролей является небольшим.

При присоединении к UserRoles и Ролям, не участвуя в Пользователях, можно найти, что это неутешительно медленно. Как часто Вы делаете это, и насколько важный скорость в этом случае? Если это важно, можно создать индекс на просто RoleID.

2
ответ дан 6 December 2019 в 19:43
поделиться

Это зависит, ожидаете ли Вы подвешивать какое-либо другое значение к тому, что у определенного пользователя есть определенная роль. Если не затем просто создают кластеризованный PK для охвата через эти два поля.

Добавьте FKs для обоих и добавьте индекс к второму полю. Уделите некоторое внимание, к которому порядку поля должны появиться в. Вы, более вероятно, будете получать ряд ролей, пользователь принадлежит или группа пользователей в определенной роли?

1
ответ дан 6 December 2019 в 19:43
поделиться

Это зависит от того, как Вы используете их. Большую часть времени я делаю первичный ключ как UserId и RoleId, чтобы удостовериться, что они уникальны. Значение того же пользователя не может иметь той же роли.

Теперь это - то, где "зависеть" играет роль. Если Вы собираетесь связать таблицу UserRole с другой таблицей, это - то, где я создаю первичный ключ UserRoleId. И превратите UserId и RoleId в ограничение на уникальность данных.

Причина этого не состоит в том, чтобы иметь на таблице, которая ссылается на UserRole, имеют и UserId и RoleId, когда это не нужно, потому что Вы связываетесь с UserRoleId а не таблицей User и ролевой таблицей соответственно.

0
ответ дан 6 December 2019 в 19:43
поделиться

Избегайте составного PK и поместите уникальный индекс на два FKs (Кажется соответствующим в этом экземпляре.). Не проблема в этом случае, но быть последовательным. Необходимость не забыть обращаться к нескольким полям для присоединения на при записи запросов является болью. Если Ваш составной ключ должен быть составлен из даты и времени, символа или других типов полей, производительность получает удар.

0
ответ дан 6 December 2019 в 19:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: