За каким стандартом кодирования SQL Вы следуете? [закрытый]

Вы должны создать один класс контекста.

public class Context {
    private final static Context instance = new Context();
    public static Context getInstance() {
        return instance;
    }

    private Connection con;
    public void setConnection(Connection con)
    {
        this.con=con;
    }
    public Connection getConnection() {
        return con;
    }

    private TabRoughController tabRough;
    public void setTabRough(TabRoughController tabRough) {
        this.tabRough=tabRough;
    }

    public TabRoughController getTabRough() {
        return tabRough;
    }
}

Вам нужно просто установить экземпляр контроллера при инициализации с помощью

Context.getInstance().setTabRough(this);

, и вы можете использовать его из всего приложение только с помощью

TabRoughController cont=Context.getInstance().getTabRough();

Теперь вы можете передать параметр любому контроллеру из всего приложения.

49
задан Bob The Janitor 8 April 2009 в 15:42
поделиться

12 ответов

Не звонил бы это кодирующий стандарт - больше как стиль кодирования

SELECT
    T1.col1,
    T1.col2,
    T2.col3
FROM
    table1 T1
    INNER JOIN ON Table2 T2 ON T1.ID = T2.ID
WHERE
    T1.col1 = 'xxx'
    AND T2.Col3 = 'yyy'
  • использует для своей выгоды зарезервированные слова
  • , основные ключевые слова на новой строке
  • не могут привыкнуть к запятым, прежде чем столбцы
  • всегда будут использовать короткие значимые псевдонимы таблицы
  • , представления префикса с префиксом v
  • снабдили procs SP (однако не используют "SP _", который резервируется для созданного в procs)
  • , не снабжают префиксом таблицы
  • имена таблиц, исключительные
51
ответ дан DJ. 7 November 2019 в 21:36
поделиться

Мне нравится предшествование запятой путь:

SELECT
      column1
    , column2
    , column3
    , COALESCE(column4,'foo') column4
FROM
    tablename
WHERE
    column1 = 'bar'
ORDER BY 
      column1
    , column2

это делает это самым легким, чтобы считать и отладить, по-моему.

14
ответ дан Ryan Guill 7 November 2019 в 21:36
поделиться

Я знаю, что это длинно, но терпите меня, это важно. Этот вопрос открыл прохладную кучу проблем. И если Вам не нравятся блоки базы данных, продолжать читать.

И, прежде чем любой будет думать о наезде на мой ответ, , видят следующую статью и соединенные статьи к нему о блокировке, и перекомпилировал; два из самых разрушительных ресурсов совершают нападки на базе данных SQL.

http://support.microsoft.com/kb/263889

, который я могу ввести довольно быстро, и мне не нравится вводить больше, чем следующий человек. Но точки ниже я следую чрезвычайно тесно, даже если это больше вводит. Так то, что я создал свои собственные приложения SP, чтобы сделать это для меня.

моменты, которые я поднимаю, действительно важны! Вы могли бы даже сказать себе, "Вы ребячество, это не проблема", ну, в общем, затем Вы не прочитали статьи выше. И , это полностью слабоумно, что M$ вставил бы эти точки как ПРИМЕЧАНИЯ. Эти проблемы мне должны быть ПОЛУЖИРНЫМИ и КРИЧАТЬ.

я также делаю большое кодирование для создания моих основных сценариев с помощью приложений C# для ускорения разработки и этих методов является очень звуковым (ценность 10 лет) для создания SPS сценариев легче и особенно быстрее.

существуют больше, чем это, но это - то, что я делаю для первых 60% из всего.

<час>

Лучшие практики

  • Использование скобки вокруг объектов, таким образом, механизм запроса явно знает поле, когда это видит его
  • Использование ТОТ ЖЕ СЛУЧАЙ как имена объекта таблицы и имена полей
  • При вызове SPS из приложения, используйте полностью определенный [dbo]. [procName] с корректным владельцем И случаем. Не Ребячество! Прочитайте статьи выше!
  • Ссылаются на владельца объекта, таким образом, безопасность явно известна и не должна быть вычислена
  • , не ДЕЛАЮТ нас "SP _", поскольку это относится к сохраненному procs системы, и наверху
  • , Использование УСТАНОВИЛО NOCOUNT НА и ВЫДЕЛИЛО NOCOUNT для устранения дополнительных издержек для отслеживания то, сколько записей обновляется в сохраненном proc, если Вам не нужны они. Обычно, Вы не делаете и можно получить огромное увеличение производительности.

Предпочтения

  • Префикс снабдил procs Суффиксом proc
  • каждый сохраненный proc с SEL, UPD, DEL, INS (или ВЫБОР, ОБНОВЛЕНИЕ, УДАЛИТЕ, ВСТАВЬТЕ)
  • , Используют для своей выгоды зарезервированные слова
  • Основные ключевые слова на новой строке (пишущей сценарий)
  • запятые Использования перед столбцами (пишущими сценарий)
  • , представления Префикса с vw
  • не снабжают префиксом таблицы
  • , Имена таблиц, исключительные
  • , Добавляют суффикс к стандартным именам как "_ByPK", "_OrderByLastName", или "_Top15Orders" для вариаций на запас <час> SP

Выбор

CREATE PROC [dbo].[procTable_SEL]
AS
SET NOCOUNT ON
SELECT
    [Column1] = T1.[col1]
  , [Column2] = T1.[col2]
  , [Column3] = T2.[col3]
FROM [dbo].[Table] T1    
INNER JOIN ON [dbo].[Table2] T2 ON T1.ID = T2.ID
WHERE
      T1.[col1] = 'xxx'
  AND T2.[Col3] = 'yyy'
SET NOCOUNT OFF
GO
<час>

, Обновление

CREATE PROC [dbo].[procTable_UPD]
AS
SET NOCOUNT ON
UPDATE t1 SET
    [Column1] = @Value1
  , [Column2] = @Value2
  , [Column3] = @Value3
FROM [dbo].[Table1] T1
INNER JOIN ON [dbo].[Table2] T2 ON T1.[ID] = T2.[ID]
WHERE
      T1.[col1] = 'xxx'
  AND T2.[Col3] = 'yyy'
SET NOCOUNT OFF
GO
<час>

Вставляет

CREATE PROC [dbo].[procTable_INS]
AS
SET NOCOUNT ON
INSERT INTO [Table1] (
[Column1]
  , [Column2]
  , [Column3]
)
VALUES (
    @Value1
  , @Value2
  , @Value3
)
SET NOCOUNT OFF
GO

, ИЛИ

CREATE PROC dbo.procTable_INS
AS
SET NOCOUNT ON
INSERT INTO [table1] (
    [Column1]
  , [Column2]
  , [Column3]
)
SELECT
    [Column1] = T1.col1
  , [Column2] = T1.col2
  , [Column3] = T2.col3
FROM dbo.Table1 T1    
INNER JOIN ON Table2 T2 ON T1.ID = T2.ID
WHERE
      T1.[col1] = 'xxx'
  AND T2.[Col3] = 'yyy'
SET NOCOUNT OFF
GO
<час>

Удаляют

CREATE PROC dbo.procTable_DEL
AS
SET NOCOUNT ON
DELETE
FROM [dbo].[Table1] T1
INNER JOIN ON [dbo].[Table2] T2 ON T1.[ID] = T2.[ID]
WHERE
      T1.[col1] = 'xxx'
  AND T2.[Col3] = 'yyy'
SET NOCOUNT OFF
GO
13
ответ дан SnapJag 7 November 2019 в 21:36
поделиться
7
ответ дан Rob Prouse 7 November 2019 в 21:36
поделиться

Из действительно очень хорошего блога на PostgreSQL, но этой темы применимо в целом:

Удобные в сопровождении запросы - моя точка зрения (depesz.com)

... Я решил что мои приоритеты для записи удобных в сопровождении запросов:

  1. Избегают бесполезного ввода.

  2. Использование искажает для таблиц/представлений. Всегда. И сделайте их разумными псевдонимами.

  3. Форматируют код в некотором роде.

  4. Избегают цитат (да, это - то, почему я ненавижу Django)

  5. синтаксис соединения Использования

, я действительно соглашаюсь с капитализацией зарезервированных слов и любого идентификатора, кроме моего собственного.

4
ответ дан Alex. S. 7 November 2019 в 21:36
поделиться

Мне лично не нравится снабжать префиксом название хранимой процедуры sp_ - это избыточно, IMO. Вместо этого мне нравится снабжать префиксом их "единицу функциональности" идентификатор. например, я назову sprocs для контакта с заказами order_Save, order_GetById, order_GetByCustomer, и т.д. Это сохраняет их всех логически сгруппированными в студии управления и мешает выбирать неправильную. (GetOrderByProduct, GetCustomerById, и т.д....)

, Конечно, это - персональное предпочтение, другие люди могут предпочесть иметь все Собирание sprocs, все Сохранения, и т.д.

Просто мой 2c.

4
ответ дан ZombieSheep 7 November 2019 в 21:36
поделиться

Я обычно сохраняю очень мало на строку, т.е.:

select
    col1,
    col2,
    col3
from
    some_table tabl1
where
    col1 = 'some'
and 
(
    col2 = 'condition'
or  col2 = 'other'
)
2
ответ дан Robin 7 November 2019 в 21:36
поделиться

Google для sql симпатичный принтер или взгляд здесь . Я не попробовал его сам, но это дает Вам хорошее начало. Большинство коммерческих инструментов как Жаба имеет опцию "форматирования", которая помогает, также.

2
ответ дан Thorsten 7 November 2019 в 21:36
поделиться

Игра вокруг с www.sqlinform.com - я рекомендую использовать стандарт ANSI-92 , и затем симпатичный это с тем сайтом.

2
ответ дан Community 7 November 2019 в 21:36
поделиться
SELECT c.id
     , c.name
     , c.folder
     , cs.num_users active_members
     , cs.num_videos

  FROM campaign c
  JOIN campaign_stats cs
    ON cs.campaign_id = c.id
  JOIN (SELECT _c.id
             , _c.name

          FROM campaign _c
         WHERE _c.type = 9) t_c 
    ON t_c.id = c.id

 WHERE c.id IN (1,2,3)
   AND cs.num_videos > 10

Это работает довольно хорошее для нас.

Этот фактический запрос не имеет большого смысла, так как я пытался создать его быстро как пример..., но это не точка.

  • t_c обозначает подзапрос таблицы категории или "временную категорию".
  • _underscoring материала в подзапросах.
  • имена столбцов псевдонима, чтобы иметь смысл в контексте запроса. например, запятые помещения "active_members"
  • в начале новых строк помогают создать динамические запросы:

    $sql .= ", c.another_column"
    
  • все остальное просто.

2
ответ дан adamJLev 7 November 2019 в 21:36
поделиться

Что-либо в синем - верхний регистр SELECT, DELETE, GO, и т.д.

, Имена таблиц исключительны как таблица, которая содержит наших клиентов, были бы клиентские Связывающие таблицы таблицы

, tablename_to_tablename

использование _ между работами в именах таблиц и параметрах

пример

BEGIN
    SELECT
        Company.ID AS Company_ID,
        Company.Client_Name,
        Company.Website,
        Office.Office_Name
    FROM
        Company_Office WITH(NOLOCK)
        INNER JOIN Company WITH(NOLOCK) ON Company_Office.Company_ID = Company.ID
    WHERE
END
2
ответ дан Roman Marusyk 7 November 2019 в 21:36
поделиться
create table
    #tempTable (
        col1 int,
        col2 int,
        col3 int
    )

insert into
    #tempTable (
        col1,
        col2,
        col3
    )
    select
        col1,
        col2,
        col3
    from
        Table3
        inner join Table2
            on Table1.col1 = Table2.col2
    where col1 = 5

select
    col2,
    case when col1 = 3
        then 'something'
        else 'somethingelse'
    end
from #tempTable
where
    col1 = 5
    and (
        col2 = 5
        or col3 in (
            select field
            from Table2
            where
                somecol = 2
                and othercol = 5
        )
    )
-2
ответ дан jandersson 7 November 2019 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: