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

Откуда: USA
Сообщений: 41
В компании разрабатывают новую спецификацию наименования полей.
Все ок, но при наименовании полей требуют повторить полное наименование таблицы. Пример:

T_Hospital
поля:
Hospital_ID - это нормально и я согласна с этим
но далее следует:
Hospital_Address1
Hospital_Address2
Hospital_City
...
Так где же я могу найти рекомендации по этому поводу, мне кажется что повторение Hospital_ overkill, лишнее и только заграмромождает в дальнейшем чтение SELECT кода или использование внутри sp. Не могу обьяснить свою позицию, по причине ограничения знания английского..поэтому ищу источники опровергающие или подтверждающие мою позицию. Help
22 сен 03, 20:28    [348487]     Ответить | Цитировать Сообщить модератору
 Re: Немного предыстории этого вопроса  [new]
alenab
Member

Откуда: USA
Сообщений: 41
Sorry? это должно быть вместе с Naming convention вопросом,

Как перенести-то в другой топик???
22 сен 03, 20:30    [348491]     Ответить | Цитировать Сообщить модератору
 Re: Немного предыстории этого вопроса  [new]
Glory
Member

Откуда:
Сообщений: 104760
Это иммет некоторый смысл.
Представим себе такой вариант

T_Hospital
поля:
Hospital_ID - это нормально и я согласна с этим
но далее следует:
Address1
Address2
City

T_Patient
поля:
Patient_id
Address1
Address2
City

Теперь если в запросе будут участвовать обе таблицы, то придется помнить с полем Address1 какой таблицы мы хотим сейчас "поработать". Конечно правильнее указывать полное имя поле(по крайней мере с таблицей), но поля возвращаемого резалт-сета ведь не отражают эту информацию. Вот стало бы и придется в запросе давать полям псевдонимы вроде Hospital_Address1 и Patient_Address1. Хотя в явном запросе/процедуре это можно и не делать, но вот в представлении точно придется.
22 сен 03, 21:00    [348512]     Ответить | Цитировать Сообщить модератору
 Re: Немного предыстории этого вопроса  [new]
alenab
Member

Откуда: USA
Сообщений: 41
Дело в том что использовать псевдонимы приходится очень редко, а ситуация когда напрямую обьединяются две таблицы со всеми полями...хм редка.
А вот использование простой выборки часто. К тому же клиентский код в Java.

представляете
tablename ---> class TableName
fieldName ---> property fieldName, method getFieldName(), setFieldName()

каждое обращение к классу выливается в строку
hospital.getHospital_Address1(); вместо hospital.getAddress1();
и так далее. Можете представить сколько раз приходится повторять это в коде, когда view строится один раз и надолго...если таких классов 30 и больше ....где повторяется все опять...
22 сен 03, 21:50    [348538]     Ответить | Цитировать Сообщить модератору
 Re: Немного предыстории этого вопроса  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
--но поля возвращаемого резалт-сета ведь не отражают эту информацию. Вот стало бы и придется в запросе давать полям псевдонимы вроде Hospital_Address1 и Patient_Address1. Хотя в явном запросе/процедуре это можно и не делать, но вот в представлении точно придется.

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

А повторять в имени имя таблицы ....... как программист я такого не могу вынести :)

Hospital_ID - это нормально и я согласна с этим

это тоже излишне - ID вполне достаточно.
22 сен 03, 21:55    [348540]     Ответить | Цитировать Сообщить модератору
 Re: Немного предыстории этого вопроса  [new]
alenab
Member

Откуда: USA
Сообщений: 41
Дело в том что после выезда за рубеж стала работать разработчиком WEB приложений, а в России была Oracle DBA. То есть знаю, что если ты пишешь просто невоятное кол-во кода, неважно где в SP или клиентской части - это просто УБИВАЕТ. Местный DBA без реального опыта Data Modeler, только техническая поддержка и secutity в MSSQL, и без опыта программирования ни SP, ни какого либо другого языка, но стандарты исходят от него
22 сен 03, 22:12    [348547]     Ответить | Цитировать Сообщить модератору
 Re: Немного предыстории этого вопроса  [new]
Glory
Member

Откуда:
Сообщений: 104760
Я бы сказал не только точно придется а лучше всегда делать так, в соответствии с содержимым рекордсета.

А повторять в имени имя таблицы ....... как программист я такого не могу вынести :)


А как контролировать что во всех(!!!) такого рода запросах/процедурах поле Address1 из таблицы Hospital будет иметь псевдоним Hospital_Address1, а не скажем Hosp_Address1, или HospitalAddress_1 или .... ??? Не приведет ли такая практика к путанице в понимании того, что же реально скрывается за псевдонимом ???

Не приведет ли требование использовать алиас для поля к тому что алиас будет использоваться всегда ? Т.е. даже в тех случаях когда запрос будет только по одной таблице. Ведь гораздо "выгоднее", добавляя таблицу в запрос, добавить к списку полей только новые, не залезая в список уже имеющихся.
Не приведет ли такая практика к фактическому использованию псевдонима вместо реального имени поля ????

Тогда уже нужно использовать метаданные. К примеру те же самы extended properties в SQL2000.
Тогда таблица будет иметь следующий вид

таблица - T_Hospital, extended property "Short description" - Lists of hospitals

поле ID, extended property "Short description" - record_id, extended property "Alias" - Hospital_ID
поле Address1, extended property "Short description" - Hospital address line 1, extended property "Alias" - Hospital_Address1
поле Address2, extended property "Short description" - Hospital address line 2, extended property "Alias" - Hospital_Address2
поле City, extended property "Short description" - Hospital location, extended property "Alias" - Hospital_City


А то вовсем без метаданных тяжеловато будет. Особенно в команде, когда структуру базы и запросы по ней создают разные люди.
А вот как лучше в конкретном случае организовать хранение метаданных - непосредственно в имени поля или еще как - это надо посмотреть.
22 сен 03, 22:21    [348558]     Ответить | Цитировать Сообщить модератору
 Re: Немного предыстории этого вопроса  [new]
alenab
Member

Откуда: USA
Сообщений: 41
Glory,
если использовать view, то используется соглашение если наименование полей пересекаются - tablename_fieldname. Но это настолько редкий случай!!!
Все программисты, а их 10 в команде согласны с этим, не согласен только DBA, потому что присвоить алиасы необходимо - о да это лишняя работа. View не строятся кем попало и где попало, только когда необходимо в проекте использовать данное представление данных а не иное.
22 сен 03, 22:42    [348569]     Ответить | Цитировать Сообщить модератору
 Re: Немного предыстории этого вопроса  [new]
alenab
Member

Откуда: USA
Сообщений: 41
Подскажите как использовать в запросе Extended Properties.
22 сен 03, 22:52    [348575]     Ответить | Цитировать Сообщить модератору
 Re: Немного предыстории этого вопроса  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
2Glory
--Не приведет ли требование использовать алиас для поля к тому что алиас будет использоваться всегда ?

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

--Ведь гораздо "выгоднее", добавляя таблицу в запрос, добавить к списку полей только новые, не залезая в список уже имеющихся.

У нас база создается и все запросы к ней на основе XML представления.
Поэтому все запросы генерятся - работает на основе XML, что исключает человеческие ошибки

--Не приведет ли такая практика к фактическому использованию псевдонима вместо реального имени поля ????

не. :) организация работы не позволяет
23 сен 03, 03:05    [348622]     Ответить | Цитировать Сообщить модератору
 Re: Немного предыстории этого вопроса  [new]
member, желающий быть инкогнгито
Guest
alenab,
очень хорошая аргументация в вашу поддержку есть у Джо Селко (Joe Celko) - весьма авторитетный специалист по SQL, поищите в вебе, дайте вашему дба, может он прочувствует ...

кстати, он Вас заодно отучит колонки называть "полями" :)
23 сен 03, 03:42    [348632]     Ответить | Цитировать Сообщить модератору
 Re: Немного предыстории этого вопроса  [new]
ziktuw
Member

Откуда:
Сообщений: 3552
Я бы сказал, что в данном вопросе можно не бодаться с руководством, а лучше уступить. Непринципиальный вопрос. Здесь будет гораздо более важное другое обстоятельство - дисциплина единообразного наименования объектов.
23 сен 03, 10:11    [348860]     Ответить | Цитировать Сообщить модератору
 Re: Немного предыстории этого вопроса  [new]
Glory
Member

Откуда:
Сообщений: 104760
2alenab
На мой взгляд вам нужно в своем кругу решить несколько другой вопрос - нужны ли вам вообще метаданные. Это зависит о того насколько каждый участник проекта посвящен в весь проект. Если посвященность например разработчика пользовательского интерфейса мала, то наличие метаданных предотвратит путаницу аттрибутов, их двоякое толкование и тп.

После этого можно уже решать вопрос организации хранения метаданных. Тут вариантов больше.
- И именование непосредственно в каждом запросе
- И совмещение метаданных с данными, т.е. когда аттрибуту дается развернутое осмысленное наименование
- И сокрытие таблиц за представлениями, в которых кажому аттриубуту будет дано развернутое наименоваение
- И использование extended properties
- И создание служебных таблиц с метаданными
- И вообще вынесение метаданных в клиентское приложение (или в средний слой при многозвенной архитектуре)
(Варианты расположены по сложности их реализации и использования)
Нужно просто оценить, что сулит вам каждый вариант в затратах при создании проекта и его расширении (!!!).


2Lepsik
У нас база создается и все запросы к ней на основе XML представления.
Поэтому все запросы генерятся - работает на основе XML, что исключает человеческие ошибки

Ну вам повезло :). Но кое-где еще и 6-ка работает
23 сен 03, 10:18    [348875]     Ответить | Цитировать Сообщить модератору
 Re: Немного предыстории этого вопроса  [new]
LAlex
Member

Откуда: Omsk
Сообщений: 209
Я могу тебе сказать, что приделать вперед что-то, характеризующее таблицу полезно будет и для тебя самой, и если вдруг кто другой будет сопровождать твое приложение гораздо быстрее поймет о чем идет речь. Это почти что автоматическое документирование кода. Другой вопрос, что повторять целое слово Hospital не имеет смысла, а проще использовать 2-3-х буквенный префикс (например, hsp_id, hsp_address и т.д.).
23 сен 03, 11:00    [348949]     Ответить | Цитировать Сообщить модератору
 Re: Немного предыстории этого вопроса  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
мне кажется в данном случае проще всего показать как именуются поля в системных таблицах самого MSSQL. Если и такой авторитет не поможет - придется смириться
23 сен 03, 11:34    [349029]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить