Объявление констант в проекте

Если вы хотите объединить две таблицы, которые имеют только частично равные столбцы, то вы должны заполнить отсутствующие столбцы соответствующих таблиц NULL или другими значениями по умолчанию. Например,

  • Таблица X с колонками A, B, C, D, E
  • Таблица Y с колонками A, B, C, F
SELECT A, B, C, D, E, '' AS F
FROM X
UNION ALL
SELECT A, B, C, '' AS D, NULL AS E, F
FROM Y

Использовать UNION (без ВСЕХ), если вы хотите устранить дубликаты. Могут быть только дубликаты, если дополнительные столбцы соответствуют значениям по умолчанию, используемым для другой таблицы.


Другой подход заключается в объединении соответствующих столбцов для устранения дубликатов в этих столбцах

SELECT
    COALESCE(X.A, Y.A) AS A,
    COALESCE(X.B, Y.B) AS B,
    COALESCE(X.C, Y.C) AS C,
    X.D,
    X.E,
    Y.F
FROM
    X
    FULL OUTER JOIN Y
        ON X.A = Y.A AND
           X.B = Y.B AND
           X.C = Y.C

Это, вероятно, соответствует вашей идее объединения UNION и JOIN. В отличие от подхода UNION, это объединяет строки с одинаковыми A, B и C.

Обратите внимание, что вы должны использовать FULL OUTER JOIN , чтобы включить результаты обеих таблиц, даже если соответствующая запись отсутствует в другой таблице. Не все диалекты SQL имеют внешнее соединение.

Функция слияния имеет разные названия на разных диалектах.

Вы также можете столкнуться с проблемой СОЕДИНЕНИЕ пропущенных значений NULL при объединении со значениями NULL.

5
задан Biswanath 11 December 2008 в 12:40
поделиться

3 ответа

Поместите константу в класс, где это является самым релевантным - например. Math.Pi, Int32.MinValue и т.д.

Я видел различные константы, которые должны на самом деле быть перечислениями, также - особенно для кодов состояния и т.д.

Я не думаю, что мудро создать класс (или модуль) только для констант, если действительно нет никакого разумного класса, с которым связаны те константы.

13
ответ дан 18 December 2019 в 09:54
поделиться

Моя практика подобна тому, что заявляет Jon. Подавляющее большинство перечислений и постоянный, очевидно, связывается с конкретным классом или модулем и объявляется общественностью там.

Самый низкий уровень моего программного обеспечения называют Утилитой и содержит математические подпрограммы и другие функции и метод общей утилиты (а не определенной утилиты к режиму того приложения). Там модуль, который имеет как набор функции, которые просто являются служебными функциями/подпрограммами, которые не имеют никакой общей темы. Именно в той одной области любые перечисления или постоянное движение.

Существует подобная область для прикладной модели, куда утилиты, которые имеют общее применение для того приложения, идут. И это, где константы, которые не могут быть связаны ни с каким классом ОБРАЗЦОВОГО движения.

Таким образом, там три области, где постоянный могут быть найдены в моей персональной платформе

Объявления класса общий служебный модуль прикладной модели общий служебный модуль служебного блока.

На практике только небольшое количество из десятков перечисления и постоянный когда-либо должно было объявляться в любой служебные модули. Большинство из тех является замедлениями Win32, используемыми функцией Win32, которые импортируются в мой блок.

1
ответ дан 18 December 2019 в 09:54
поделиться

Я соглашаюсь с @Jon. Однако для констант, которые уникальны для Вашего приложения - т.е. они - значения по умолчанию конфигурации, настраивая параметры, и т.д., я иногда создаю статический класс конфигурации со строгим контролем типов для содержания их. Я выставляю значения через свойства только с общедоступными определенными методами считывания. Таким образом, они могут быть загружены из конфигурационного файла, но сосланы всюду по Вашему коду как фиксированные значения.

3
ответ дан 18 December 2019 в 09:54
поделиться
Другие вопросы по тегам:

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