Имена полей

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Имена полей

Сообщение Zhur » 27 апр 2006, 11:08

Добрый день.
Вот такой вот у меня вопрос:
Прочитал одну книжку... В ней автор настаивал давать имена полям таблиц по следующей схеме: имя таблицы+"_"+имя поля, якобы для того, что бы имена полей во всей базе были уникальны.
Что ж... попробовал я так работать - могу сказать что очень уж это неудобно, когда есть куча похожих по структуре таблиц, но выражающие разные сущности. Может быть эти неудобства потом себя оправдают? Но ведь мы почти никогда не обращаемся к к.-л. поля не указывая, о какой таблице идет речь...
Интересно, а что по этому поводу думаете Вы, уважаемые наши "подсказчики"? :shock:

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 27 апр 2006, 12:07

с одной стороны - да. правильная методика разработки БД, это когда ВСЕ имена полей по предметной области находятся в одном "пуле", где не допускаются повторы. Затем, строится концептуальная модель БД, то есть определяются сущности, которые наполняются атрибутами (столбцами, полями) из этого общего пула. И уж потом автоматом генерится физическая модель.

в данном случае использовать префикс сущности перед именем столбца не получится, т.к. сущность, куда попадет столбец, на этапе "набора пула столбцов" еще неизвестна.

Причем, например, если есть столбец "номер телефона", то он определяется как домен, а затем под разными (!) именами столбцов добавляется в таблицы "клиенты", "отделы", "менеджеры" и т.п.

Но это теория, а на практике каждый выбирает то, как ему удобнее. То есть, я описал идеальный вариант, а даже с нормальными формами практика не рекомендует пытаться "достичь идеала".

Я бы советовал, если делаешь два столбца NAME в разных таблицах, то чтобы содержимое этого столбца было похожим по смыслу. Чаще всего это делают для суррогатных ключей таблиц (ID). То есть, если вдруг смысловое наполнение A.NAME и B.NAME отличаются, то лучше их действительно поименовать по разному, дабы потом не было путаницы в голове при написании или просмотре текста запросов.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 27 апр 2006, 13:01

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

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 27 апр 2006, 13:13

То есть, никаких подводных камней не должно встретиться?
Тогда гораздо удобнее использовать названия полей попроще... типа ID,NAME... ведь чаще всего эти поля имеют идентичный смысл в различных сущностях (таблицах).

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 27 апр 2006, 13:14

Ivan_Pisarevsky писал(а):Зачем параноидальная уникальность, есть же псевдонимы. Я вот практичести все запросы пишу с пседонимами, а если в запросе есть джойны то 100% с псевдонимами.
Да... и все в общем-то так делают 8)

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 27 апр 2006, 14:10

Проста эта... кг/ам. Это я про книжку. Аффтар баз более чем с 20 таблицами не видал.

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 27 апр 2006, 14:37

Merlin писал(а):Проста эта... кг/ам. Это я про книжку. Аффтар баз более чем с 20 таблицами не видал.
Вот и я пришел к такому же мнению...
А теперь вопрос по существу... Как переименовать поле, на которое есть первичный или внешний ключ?
Что-то сервер не дает мне это сделать

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 27 апр 2006, 17:21

Я вот практичести все запросы пишу с пседонимами, а если в запросе есть джойны то 100% с псевдонимами.
с псевдонимами ИМЕН СТОЛБЦОВ?

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 27 апр 2006, 17:38

kdv писал(а):
Я вот практичести все запросы пишу с пседонимами, а если в запросе есть джойны то 100% с псевдонимами.
с псевдонимами ИМЕН СТОЛБЦОВ?
По-моему Иван имел в виду локальные псевдонимы таблиц в SELECT

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 27 апр 2006, 18:57

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

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 28 апр 2006, 08:20

Вестимо псевдонимы для имен таблиц :)
Просто когда в запросе хотя бы пара таблиц, всегда обращение к полю делаю как псевдоним.имя_поля и я всегда знаю откуда я в итоге получу данные и оптимизатору не надо ничего "домысливать".
А имя столбца должно быть просто читаемым и понимаемым, а не вида very_long_field_identificator1, very_long_field_identificator2 и тп...

smu
Сообщения: 39
Зарегистрирован: 29 окт 2005, 10:12

Сообщение smu » 29 апр 2006, 03:42

kdv писал(а): Я бы советовал, если делаешь два столбца NAME в разных таблицах, то чтобы содержимое этого столбца было похожим по смыслу...
Хочу добавить, что это весьма удобно для справочных справочников (словарей), которые по структуре одинаковы. Например, если более 10 словарей имеют однотипную структуру вроде (ID, NAME_FULL, NAME_SHORT), то в клиентской программе легче и проще реализовать редактирование таких справочников. Да и составление запросов с использованием JOIN будет выглядеть логично.

Ответить