На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается для обсуждения вопросов использования баз данных, за исключением составления запросов на SQL. Для этого выделен специальный раздел. Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Chow, Bas, MIF
  
> Зарезервированные слова в названии таблиц/полей , [PostgreSQL]
    Язык - Java
    СУБД - PostgreSQL

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

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

    "schema1.\"state\""

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

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

    Как быть? Есть ли более красивое решение?
    Сообщение отредактировано: JoeUser -
      Цитата sham6215 @
      База после этого выглядит некрасиво.

      Ну очень странное заявление...
      Можно попробовать создать для использования в запросах представление, типа
      ExpandedWrap disabled
        CREATE VIEW users
        AS
        SELECT * FROM "user"
      и проверить, хватает ли у СУБД интеллекта "развернуть" вьюшку - главным образом в части полноценного использования индексов.
        Цитата sham6215 @
        База после этого выглядит некрасиво.

        Спорное заявление.
          Цитата Akina @
          Ну очень странное заявление...

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


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

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

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

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

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

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

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

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

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

                  Ну попробуй чёнить вроде U&!0022order!0022 UESCAPE '!'. Если не, то меняй СУБД :D
                    Цитата sham6215 @
                    В базе названия всех таблиц - существительные в единственном числе.

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

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

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

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

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

                      Всем спасибо!
                        Цитата sham6215 @
                        В базу нужно добавить таблицу user, или state.

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

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

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

                        Правильно. Если попутно все ,что названо зарезервированными словами или очень похожими на них по написанию переименовывается, чтобы не дай бог не перепутать. ЕМНИП рефакторингом такой процесс называется.
                        Сообщение отредактировано: Павел Калугин -
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0375 ]   [ 16 queries used ]   [ Generated: 19.03.24, 02:52 GMT ]