Именование полей таблицы с префиксом

Василий М.

Новичок
Всем привет. Помню, была тема, в ней обсуждалось, стоит ли именовать столбцы таблицы с префиксом, имеющего вид самой таблицы. Не нашел эту тему((

Т.е. для таблицы `user` именовать поля как user_name, user_login, user_password

Скопировал с форума одного плюсы:
1. не требуется писать алиасов для таблиц
2. удобно при больших запросах - четко видишь, от какой таблицы идет поле, даже не видя таблицу
3. меньше путанницы - при обычном подходе: в разных запросах, когда много таблиц - можешь дать разные алиасы для одних и тех же таблиц - если же есть префиксы - все стандартизированно на всю БД раз и навсегда
4. меньше путанницы при выборке из присоединенных таблиц - когда много одних и тех же name, id - приходится давать алиасы полям при выборке, при использовании префиксов - ничего этого не нужно, никогда не путаешься
Выслушаю все `за` и `против`.
 
Последнее редактирование:

Redjik

Джедай-мастер
вижу только два удобства

1) для простеньких запросов с join не надо лепить alias - все столбцы будут иметь уникальные имена
2) удобно LEFT JOIN users USING (...)

против - избыточность информации

Сам пишу без префиксов.
 

AmdY

Пью пиво
Команда форума
Василий М., эту проблему нужно решать на уровне query builder-а. т.к. все плюсы пропадают стоит таблицу заджойнить на себя.
Я делаю как в doctrine 1, добавляю tableAlias__field, затем это удобно раскладывать по вложенным масивам.
 

Redjik

Джедай-мастер
Василий М., эту проблему нужно решать на уровне query builder-а. т.к. все плюсы пропадают стоит таблицу заджойнить на себя.
ага, я поэтому и написал - для простеньких запросов, не смог сформулировать
таблицу заджойнить на себя
 

Adelf

Administrator
Команда форума
user_name или user.name - какая разница?
Второе просто менее избыточно в других ситуациях.
 

riff

Новичок
Раньше добавлял, а потом всё больше и больше замечал, что кроме избыточности писанины это ничего не привносит. Как-то всё разруливается и без них. Например, вроде бы и у каталога есть title и у продукта есть title, а оказывается, что вместе они никогда и не запрашиваются, а точнее, сначала нужна информ. про каталог (ты его запрашиваешь, что-то обрабатываешь), а потом нужна информ. о продукте из этого каталога, а переменную с инф. о каталоге не обязательно же выбрасывать, можно продолжать её использовать и тогда при запросе продукта запрашиваешь только его информ.
А когда всё же нужны они вместе, то для пишу select main_table.*, other.title other_title, ... (но в прочем я не претендую на звание опытного бойца)

Я про другое хотел сказать. Прочитав вопрос, я смутно вспомнил, что вроде есть опция, при которой имена колонок возвращаются ввиде "table.col". может она пригодится в сложных ситуациях? (вспомнить бы)
 

A1x

Новичок
не пойму в чем проблема написать алиасы, которые обычно из 1-2 букв в отличие от имен таблиц
ладно еще если имя таблицы коротокое, вроде user, а если что-то типа order_status_history или еще чего похуже
задолбешься потом префиксы писать. Пишу всегда без префиксов
 

AmdY

Пью пиво
Команда форума
Ну и наброшу - стараюсь вообще джойнов не использовать, лучше +10 запросов чем эта бяка.
 

Тугай

Новичок
Использую tablename_id, все остальные поля без префиксов.
Пердпочитаю a.a_id = b.a_id, вместо a.id= b.a_id.
 

hell0w0rd

Продвинутый новичок
А зачем? В чем простота?
Код:
SELECT u.id, u.name FROM user u
JOIN article a ON a.user = u.id
WHERE a.rating > 100;
Код:
SELECT user_id, user_name FROM user
JOIN article ON article_user = user_id
WHERE article_rating > 100;
Похоже на имитирование неймспейсов в php, когда уже на улице 2013 год и первая версия, в которую ввели неймспейсы уже считается устаревшей
PS я такой подход использую, когда даю названия связям/триггерам, просто потому что они должны быть уникальны в целом в базе
 

riff

Новичок
не вспомните что это за опция?
Поиски безуспешны, сам надеялся, что подскажут где я это видел ). стэковерфлоу перерыл, вопросы подобные были, но простого ответа типа fetch_full_assoc нет.
 

Breeze

goshogun
Команда форума
Партнер клуба
user.user_login -- каша масленая с маслом
 

Welcome

Новичок
Насколько я понял то речь идет о вот таком:
Код:
select o.ID, u.id as User_ID, u.login as User_Login
from orders as o
left join users as u on (o.user_id = u.id)
и на выходе получить
Код:
array(
    'ID' => 1,
    'User' => array(
          'ID' => 1,
          'Login' => 'User'
    )
)
По моему вполне удобно и отлично... Не понимаю почему никому такой вариант не нравиться.
 

hell0w0rd

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

akd

dive now, work later
Команда форума
/*бурчит в никуда*/
всегда думал что базы проектируются чтобы все было ясно и понятно в первую очередь при взгляде на структуру в схеме. а оно вона как оказывается ...
 
Сверху