Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Базы данных: Общие вопросы > Зарезервированные слова в названии таблиц/полей


Автор: sham6215 21.11.16, 16:19
Язык - Java
СУБД - PostgreSQL

В базе названия всех таблиц - существительные в единственном числе.
В базу нужно добавить таблицу user, или state.

user, или state - зарезервированные слова и чтобы их использовать в запросе, нужно экранировать.
Например (строка из Джавы):

"schema1.\"state\""

Подобный синтаксис будет и для полей, если они зарезервированные слова, что делает строку запроса замусоренной.
Verbatim строк в Java нет.

Выхода я вижу два:
1. Переименовать таблицу в существительное множественного числа (users, states). База после этого выглядит некрасиво.
2. Оставить как есть но терпеть некрасивые (грязные) строки в коде.

Как быть? Есть ли более красивое решение?

Автор: Akina 21.11.16, 17:22
Цитата sham6215 @
База после этого выглядит некрасиво.

Ну очень странное заявление...
Можно попробовать создать для использования в запросах представление, типа
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    CREATE VIEW users
    AS
    SELECT * FROM "user"
и проверить, хватает ли у СУБД интеллекта "развернуть" вьюшку - главным образом в части полноценного использования индексов.

Автор: Bas 22.11.16, 06:33
Цитата sham6215 @
База после этого выглядит некрасиво.

Спорное заявление.

Автор: sham6215 22.11.16, 10:50
Цитата Akina @
Ну очень странное заявление...

Цитата Bas @
Спорное заявление.


Вы считаете, что нет проблем, в том, что таблицы называются по-разному?
Например: users, car, orders, product и т.д.
Мне не нравится, как-то неодинаково и в глаза бросается. Для mysql я бы не спрашивал, сделал бы все одинаково с бектиками ``, но тут действительно неудобно.

Автор: Akina 22.11.16, 11:53
Цитата sham6215 @
Вы считаете, что нет проблем, в том, что таблицы называются по-разному?

Ну я, например, считаю, что вообще пофиг, как таблицы называются. А уж что до единого образия, так это вообще никому не надо. Ну и потом, что логичнее:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    -- так
    SELECT username FROM users where id=1
    -- или так
    SELECT username FROM user  where id=1

? Как по мне, так первое - выбрать юзера из юзеров...

Автор: Bas 22.11.16, 12:55
Цитата Akina @
Как по мне, так первое - выбрать юзера из юзеров...

Может у него однопользовательская БД.
Цитата sham6215 @
Например: users, car, orders, product и т.д.

У мгогих пользователей одна машина, много заказов , продуктов?
Или подразумевается что user, car, order, product содержат по одной записи?

Автор: sham6215 24.11.16, 09:17
Цитата Akina @
? Как по мне, так первое - выбрать юзера из юзеров...

Я не против как множественного, так и единственного числа. Для меня главное, чтобы в одной базе было одинаково. Если ты начинаешь работать с базой, где все в единственном числе user, car, product, а потом добавляешь туда orders, то это как-то некрасиво и на мой взгляд неправильно.

Цитата Bas @
У мгогих пользователей одна машина, много заказов , продуктов?
Или подразумевается что user, car, order, product содержат по одной записи?

Это обычные таблицы, где может быть много записей, независимо от названия.
В таблицах user, car, order, product будет много пользователей, машин, заказов, продуктов.
Просто все таблицы в базе уже именованы единственным числом.

И возвращаясь к моему вопросу. Видите ли вы какие-то возможности назвать таблицу например, order и создавать при это запросы, которые в коде будут без экранирования \", которое мусорит запрос?

Автор: Akina 24.11.16, 10:52
Цитата sham6215 @
Видите ли вы какие-то возможности назвать таблицу например, order и создавать при это запросы, которые в коде будут без экранирования \", которое мусорит запрос?

Ну попробуй чёнить вроде U&!0022order!0022 UESCAPE '!'. Если не, то меняй СУБД :D

Автор: JoeUser 24.11.16, 11:15
Цитата sham6215 @
В базе названия всех таблиц - существительные в единственном числе.

Конечно на уровне имхо, но ...

Цитата Akina @
Как по мне, так первое - выбрать юзера из юзеров...

... это правильно, потому как логично!

Цитата sham6215 @
что делает строку запроса замусоренной

Спорное утверждение! Мне наоборот нравится. Экранирование хорошо отделяет ключевые конструкции от сущностей. А если еще и соблюдать отступы/вложенности, ключевые конструкции писать строго в верхнем регистре, не брезговать комментариями ... sql-код будет приятно читаем.

Автор: sham6215 24.11.16, 13:55
Ок, понятно.
Думаю, дальше дискутировать нет смысла.

Всем спасибо!

Автор: Павел Калугин 02.12.16, 11:47
Цитата sham6215 @
В базу нужно добавить таблицу user, или state.

Очень спорный вопрос необходимости такого действа. Кто мешает добавить таблицу tblUsers и tblStates?
Цитата sham6215 @
ереименовать таблицу в существительное множественного числа (users, states). База после этого выглядит некрасиво.

Некрасиво она как раз выглядит с указанными Вами именами.
Есть правила хорошего тона (разные, всякие) Но ни в одном из них таблицу для хранения много сущностей не называют именем сущности в единственном числе. Во мнигих рекомендованы префиксы позволяющие отделить "зерна от плевел"
В вашем понятии "красиво" разные способы представления данных будут носить одно и тоже имя user, что даст полную путаницу и ошибки уже в самих запросах.
Таблица tblUsers (t_users) должна отличатся от представления vUsers и от табличной функции fnUsers ;)

Цитата sham6215 @
Для меня главное, чтобы в одной базе было одинаково. Если ты начинаешь работать с базой, где все в единственном числе user, car, product, а потом добавляешь туда orders, то это как-то некрасиво и на мой взгляд неправильно.

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

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)