Каковы плюсы / минусы использования синонима и представления? - PullRequest
35 голосов
/ 15 мая 2009

Это общий вопрос проектирования базы данных. Каковы преимущества использования синонима при разработке базы данных по сравнению с простым представлением? Какие основные соображения следует учитывать при выборе между двумя?

Пример просмотр :

CREATE VIEW Users AS
SELECT * FROM IdentitySystem.dbo.Users

И эквивалентный синоним:

CREATE SYNONYM Users 
FOR IdentitySystem.dbo.LCTs

Ответы [ 7 ]

39 голосов
/ 15 мая 2009

Это разные вещи. Синоним - это псевдоним для объекта напрямую, представление - это конструкция над одной или несколькими таблицами.

Некоторые причины использовать представление:

  • Может потребоваться отфильтровать, объединить или иным образом изменить структуру и семантику результирующего набора

  • Может потребоваться обеспечить устаревшую поддержку базовой структуры, которая изменилась, но имеет зависимости, которые вы не хотите перерабатывать.

  • Может обеспечить безопасность, когда часть содержимого таблицы должна быть видимой для некоторого класса пользователей, но не для всех. Это может включать удаление столбцов с конфиденциальной информацией или фильтрацию подмножества записей.

  • Может пожелать инкапсулировать некоторую бизнес-логику в форму, доступную пользователям для отчетности.

  • Возможно, вы захотите объединить данные из более чем одного источника.

... Плюс еще много.

Причины использовать синоним:

  • Возможно, вы захотите создать псевдоним объекта в другой базе данных, где вы не можете (или не хотите) жестко кодировать ссылку на конкретную базу данных.

  • Возможно, вы захотите перенаправить на источник, который изменяется со временем, например, на архивную таблицу.

  • Вы хотите создать псевдоним чего-либо таким, чтобы он не влиял на оптимизатор запросов.

... Плюс еще много.

6 голосов
/ 15 мая 2009

Есть много соображений. Короче говоря, используйте инструмент, который лучше всего подходит для каждой ситуации.

С целью я могу

  • скрыть столбцы
  • добавить предикаты (предложение WHERE) для ограничения строк
  • переименовать столбцы
  • присвоить имя столбца выражению SQL

С синонимом я могу:

  • ссылки на объекты в других схемах и базах данных без указания имени

Возможно, с помощью синонимов можно сделать больше. В проектах наших приложений (базы данных Oracle) мы используем схему «владелец» (пользователь) для всех объектов базы данных (таблиц, представлений, триггеров и т. Д.) И предоставляем привилегии для этих объектов другим «приложениям» пользователи. В каждой из пользовательских схем «app» мы создаем синонимы для ссылки на объекты «owner».

НТН

3 голосов
/ 04 октября 2014

Проекция столбца из вида устанавливается во время создания. Поэтому, если вы добавите столбец к базовому представлению, он не будет отображаться, пока вы не измените представление. Не так с синонимом. Думайте об этом как о простом замене имени в вашем tsql, обычно, чтобы скрыть сложность.

3 голосов
/ 31 декабря 2012

Я использую синонимы для совместного использования объектов из других баз данных, поэтому при использовании .Net Entity Framework я могу использовать один ObjectContext для доступа ко всем необходимым данным из многих баз данных.

3 голосов
/ 16 мая 2009

Представление в первую очередь является простым / сложным оператором "select". По сути, вы используете представление в качестве маски и отображаете только те значения столбцов, которые вам нужны. Вы используете представление с намерением не показывать дополнительную информацию конечному пользователю.

Принимая во внимание, что синоним является альтернативным именем для объектов базы данных.

  • позволяет использовать таблицы в другой схеме без добавления префикса схемы имя в имени таблицы с точкой, как в (имя пользователя.tab_name можно заменить на some_synonym_name)
  • вам не интересно делиться реальным объектом с другими,
1 голос
/ 08 января 2015

Я надеюсь, что это может кому-то помочь, я посмотрел эту статью и нашел причину использовать View вместо синонима.

Когда вы используете Sql-сервер в качестве Db-сервера и SAS в качестве клиента. Если вы используете синоним, он не будет распознан в вашей библиотеке SAS. Я должен был создать представление.

Это не оптимизировано, но, по крайней мере, Windows SAS с Sql-сервером тоже не лучший:)

1 голос
/ 05 февраля 2011

Пожалуйста, исправьте меня, если я ошибаюсь, но я думаю, что вижу другое использование синонима (по крайней мере, в Progress OpenEdge), который я нигде не вижу документированным, что может сделать его еще более безопасным, чем представление. Синтаксис оператора DML SELECT позволяет использовать таблицу, представление или синоним, но операторы INSERT, UPDATE и DELETE допускают только таблицу или представление. Некоторые представления, если они соответствуют определенным критериям, обеспечивают обновляемый, вставляемый и удаляемый доступ к данным. Синоним кажется хорошим способом предоставления доступа к данным только для чтения, без необходимости возиться с предоставлением (или отказом) привилегий для представлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...