Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.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 |
Ну очень странное заявление... Можно попробовать создать для использования в запросах представление, типа <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> и проверить, хватает ли у СУБД интеллекта "развернуть" вьюшку - главным образом в части полноценного использования индексов. CREATE VIEW users AS SELECT * FROM "user" |
Автор: Bas 22.11.16, 06:33 |
Спорное заявление. |
Автор: sham6215 22.11.16, 10:50 |
Вы считаете, что нет проблем, в том, что таблицы называются по-разному? Например: users, car, orders, product и т.д. Мне не нравится, как-то неодинаково и в глаза бросается. Для mysql я бы не спрашивал, сделал бы все одинаково с бектиками ``, но тут действительно неудобно. |
Автор: Akina 22.11.16, 11:53 |
Ну я, например, считаю, что вообще пофиг, как таблицы называются. А уж что до единого образия, так это вообще никому не надо. Ну и потом, что логичнее: <{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 |
Может у него однопользовательская БД. У мгогих пользователей одна машина, много заказов , продуктов? Или подразумевается что user, car, order, product содержат по одной записи? |
Автор: sham6215 24.11.16, 09:17 |
Я не против как множественного, так и единственного числа. Для меня главное, чтобы в одной базе было одинаково. Если ты начинаешь работать с базой, где все в единственном числе 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 '!'. Если не, то меняй СУБД |
Автор: JoeUser 24.11.16, 11:15 |
Конечно на уровне имхо, но ... ... это правильно, потому как логично! Спорное утверждение! Мне наоборот нравится. Экранирование хорошо отделяет ключевые конструкции от сущностей. А если еще и соблюдать отступы/вложенности, ключевые конструкции писать строго в верхнем регистре, не брезговать комментариями ... sql-код будет приятно читаем. |
Автор: sham6215 24.11.16, 13:55 |
Ок, понятно. Думаю, дальше дискутировать нет смысла. Всем спасибо! |
Автор: Павел Калугин 02.12.16, 11:47 |
Очень спорный вопрос необходимости такого действа. Кто мешает добавить таблицу tblUsers и tblStates? Цитата sham6215 @ ереименовать таблицу в существительное множественного числа (users, states). База после этого выглядит некрасиво. Некрасиво она как раз выглядит с указанными Вами именами. Есть правила хорошего тона (разные, всякие) Но ни в одном из них таблицу для хранения много сущностей не называют именем сущности в единственном числе. Во мнигих рекомендованы префиксы позволяющие отделить "зерна от плевел" В вашем понятии "красиво" разные способы представления данных будут носить одно и тоже имя user, что даст полную путаницу и ошибки уже в самих запросах. Таблица tblUsers (t_users) должна отличатся от представления vUsers и от табличной функции fnUsers Цитата sham6215 @ Для меня главное, чтобы в одной базе было одинаково. Если ты начинаешь работать с базой, где все в единственном числе user, car, product, а потом добавляешь туда orders, то это как-то некрасиво и на мой взгляд неправильно. Правильно. Если попутно все ,что названо зарезервированными словами или очень похожими на них по написанию переименовывается, чтобы не дай бог не перепутать. ЕМНИП рефакторингом такой процесс называется. |