Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 [dbo] - объясните начинающему  [new]
stanilar
Member

Откуда: Спб
Сообщений: 888
Здравствуйте коллеги.

Зачем и когда требуется слово "dbo", и почему его нужно указывать в квадратных скобках?
3 июл 15, 18:45    [17850418]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
СТУДЕНТ123
Guest
Про скобки незнаю, вроде необязательно.
DBO - это владелец объекта, к примеру для использования пользовательской (самописной) функции необходимо всегда указывать ее владельца. А так в BOL достаточно хорошо изложено про схемы.
3 июл 15, 19:15    [17850496]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31868
stanilar
Здравствуйте коллеги.

Зачем и когда требуется слово "dbo", и почему его нужно указывать в квадратных скобках?
Может быть много объектов с одинаковым именем, но с разными владельцами. К тому же на поиск объекта, если не указан владелец, требуется дополнительное время. Поэтому владельца нужно указывать.

Имена в квадратных скобках нужно писать, если имя соответствует ключевому слову, или не соответствует правилу написания идентификаторов.

Например:
CREATE TABLE [DROP DATABASE MASTER]
(
    [столбец с кривым названием, но зато целого типа] int,
    [а этот столбец вообще
с переводом строки] int
)


Поэтому часто пишут все имена в скобках, на всяки случай.
3 июл 15, 19:36    [17850550]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
alexeyvg
stanilar
Здравствуйте коллеги.

Зачем и когда требуется слово "dbo", и почему его нужно указывать в квадратных скобках?
Может быть много объектов с одинаковым именем, но с разными владельцами. К тому же на поиск объекта, если не указан владелец, требуется дополнительное время. Поэтому владельца нужно указывать.
Чему вы учите молодежь? Еще с 2005-го сервера нет больше напрямую владельца у объектов. Объект принадлежит схеме, а у схемы есть владелец.

https://technet.microsoft.com/en-us/library/dd283095(v=sql.100).aspx
SQL Server 2005 implemented the concept of a database object schema. A schema is a distinct namespace to facilitate the separation, management, and ownership of database objects. It removed the tight coupling of database objects and owners to improve the security administration of database objects. Database object schemas offer functionality to control and help secure application objects within a database environment not available in previous versions of SQL Server.
3 июл 15, 19:55    [17850609]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
o-o
Guest
Mind
Еще с 2005-го сервера нет больше напрямую владельца у объектов. Объект принадлежит схеме, а у схемы есть владелец.

у схемы есть владелец, но и у объекта есть владелец,
по умолчанию это владелец схемы, но может быть и кто угодно
короче, dbo -- это схема. а про владельца мы ничего не знаем.
create user Mind without login;
create table dbo.t (id int);

alter authorization on object::dbo.t to Mind;

select name, principal_id, schema_id,
       USER_NAME(principal_id) as owner, SCHEMA_NAME(schema_id) as sch
from sys.tables
where name = 't'
-----------
name	principal_id	schema_id	owner	sch
t	14	1	Mind	dbo
3 июл 15, 20:16    [17850670]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31868
Mind
Чему вы учите молодежь? Еще с 2005-го сервера нет больше напрямую владельца у объектов. Объект принадлежит схеме, а у схемы есть владелец.
Ага, это я по старинке говою, оплошал...
Но в общем в упрощённом виде сойдёт :-)
3 июл 15, 20:22    [17850690]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
o-o
Guest
Column nameData typeDescription
principal_idintID of the individual owner; if different from the schema owner. By default; schema-contained objects are owned by the schema owner. However; an alternate owner can be specified by using the ALTER AUTHORIZATION statement to change ownership.

sys.objects (Transact-SQL)
(";" заменяет "," ибо не знаю, как экранировать. иначе CSV табличку дробит)
3 июл 15, 20:22    [17850695]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
o-o
Guest
alexeyvg
Но в общем в упрощённом виде сойдёт :-)

да не сойдет же.
вон в моем примере владелец -- Mind.
ну не указывать же его теперь перед объектом, правда?
и потом, когда у кого-то не сработает ownership chaining, надо понимать, куда копать
3 июл 15, 20:25    [17850702]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
o-o
alexeyvg
Но в общем в упрощённом виде сойдёт :-)

да не сойдет же.
вон в моем примере владелец -- Mind.
ну не указывать же его теперь перед объектом, правда?
и потом, когда у кого-то не сработает ownership chaining, надо понимать, куда копать
Да, конечно же, вы правы. Owner никуда не делся, просто они его спрятали и он больше не используется в имени таблицы.
3 июл 15, 20:37    [17850728]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
stanilar
Member

Откуда: Спб
Сообщений: 888
Спасибо за ответы.

o-o
dbo -- это схема


Это какая-то фиксированная, системная схема? Сколько не видел кода, всегда пишется dbo, может от того что в основном смотрю тестовые примера, а не боевое применение?
3 июл 15, 23:18    [17851222]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
o-o
Column nameData typeDescription
principal_idintID of the individual owner; if different from the schema owner. By default; schema-contained objects are owned by the schema owner. However; an alternate owner can be specified by using the ALTER AUTHORIZATION statement to change ownership.

sys.objects (Transact-SQL)
(";" заменяет "," ибо не знаю, как экранировать. иначе CSV табличку дробит)
[СSV=<разделитель>] [/СSV]
4 июл 15, 09:25    [17851625]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31868
stanilar
Это какая-то фиксированная, системная схема? Сколько не видел кода, всегда пишется dbo, может от того что в основном смотрю тестовые примера, а не боевое применение?
Да, фиксированная, системная.

Обычно её и используют, за исключением случая, когда принимается решение использовать в базе свои собственные схемы, для какой то конкретной цели. То есть если у вас нет идей, для чего можно было бы использовать схемы, то и не используйте.
4 июл 15, 15:30    [17852106]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31868
o-o
alexeyvg
Но в общем в упрощённом виде сойдёт :-)

да не сойдет же.
вон в моем примере владелец -- Mind.
ну не указывать же его теперь перед объектом, правда?
и потом, когда у кого-то не сработает ownership chaining, надо понимать, куда копать
Да я понимаю. Я имел в виду, что такого упрощения достаточно, если не использовать никаких других схем и владельцев, кроме как dbo, чего обычно хватает всем.

Конечно, если вдруг какой то разработчик использовал другого владельца/схему (в том числе неявно, не указав схему при создании объекта), а другие разработчики про эти схемы вообще ничего не знают, тогда да, тогда они будут удивляться ошибкам, читать документацию и "копать".
4 июл 15, 15:34    [17852118]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8584
Добавлю, что схема является частью полного названия объекта. Всегда указывайте схему - это помогает оптимизатору повторно использовать планы запросов.
6 июл 15, 11:12    [17856267]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
Oleksii Kovalov
Member

Откуда:
Сообщений: 100
Владислав Колосов
Добавлю, что схема является частью полного названия объекта. Всегда указывайте схему - это помогает оптимизатору повторно использовать планы запросов.

С каждой версией всё меньше и меньше, если честно
Оптмизатор с возрастом становится умнее, и многие best practices, которым следовало неукоснительно следовать раньше - уже не имеют такого значения.
6 июл 15, 11:50    [17856486]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
Oleksii Kovalov
Владислав Колосов
Добавлю, что схема является частью полного названия объекта. Всегда указывайте схему - это помогает оптимизатору повторно использовать планы запросов.

С каждой версией всё меньше и меньше, если честно
Оптмизатор с возрастом становится умнее, и многие best practices, которым следовало неукоснительно следовать раньше - уже не имеют такого значения.
При чём тут оптимизатор?
Не укажете схему - возможно, будет выполняться не та процедура, о которой Вы думали.
У меня такое было, когда приходилось рассылать обновления по удалённым филиалам.
Тамошний админ слепил для своей собственной схемы копии всех объектов нашей системы.
А мне потом несколько часов пришлось разбираться, почему же так удивительно
ведёт себя "исправленная" процедура (вызовы с клиента как раз были без указания схемы).
6 июл 15, 12:00    [17856569]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
Oleksii Kovalov
Member

Откуда:
Сообщений: 100
iap
При чём тут оптимизатор?
Не укажете схему - возможно, будет выполняться не та процедура, о которой Вы думали.
У меня такое было, когда приходилось рассылать обновления по удалённым филиалам.
Тамошний админ слепил для своей собственной схемы копии всех объектов нашей системы.
А мне потом несколько часов пришлось разбираться, почему же так удивительно
ведёт себя "исправленная" процедура (вызовы с клиента как раз были без указания схемы).

ну линкер, на который потом опирается оптимизатор, чтобы уметь кэшировать планы запросов.
С резолвингом имён, кстати, вроде как тоже что-то менялось, где-то у меня даже диаграмма валяется, на тему "как резолвятся имена"
и вроде как там поменялись чуть приоритеты, и дефолтная схема для поиска объекта без схемы это не схема юзера, а схема парент объекта.
Хотя в данном случае это, конечно, не помогло бы.
6 июл 15, 12:44    [17856835]     Ответить | Цитировать Сообщить модератору
 Re: [dbo] - объясните начинающему  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8584
iap,

судя по справке о вопросах плана запроса, MS для повторного использования планов рекомендует всегда указывать полное имя объекта, со схемой.
6 июл 15, 14:13    [17857413]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить