Будьте очень внимательны с неопределенными значениями. В поведении неопределенных значений проявляется много произвола и противоречивости, и они могут быть в этой связи источником многих трудностей.
Например:
— два неопределенных значения считаются дубликатами друг друга в связи со спецификациями DISTINCT, UNIQUE и ORDER BY; это не относится, однако, к WHERE или GROUP BY;
— при наличии неопределенных значений для стандартных функций COUNT, SUM и AVG не гарантируется удовлетворение требования, чтобы среднее было равно сумме, деленной наколичество;
— при наличии неопределенных значений не гарантируется, что выражение SUM(Fl) +SUM(F2) будет иметь то же самое значение, что и выражение SUM(F1+F2), где F1 и F2—некоторые поля.
В результате следует очень внимательно подумать, хотите ли Вы вообще допускать неопределенные значения для каких-либо полей. Вполне возможно, что Вашим намерениям будет лучше служить использование некоторого «недопустимого» значения, которое, однако, не является неопределенным, такого, как -1 для поля ОТРАБОТАННЫЕ_ЧАСЫ. Если Вы действительно выберете этот путь, то данные ранее рецепты относительно первичных и внешних ключей потребуют, конечно, некоторого пересмотра. Заметим, однако, что имеются три места, в которых понятие неопределенного значения встраивается в саму структуру языка SQL. А именно, SQL:
|
|
— предусматривает присваивание неопределенного значения для любого поля, добавляемого к таблице с помощью предложения ALTER TABLE
— генерирует неопределенное значение как результат применения какой-либо функции, например AVQ, к пустому множеству
— генерирует неопределенное значение для любого неспецифицированного поля при выполнении предложения INSERT.
Векторы
Представляйте векторы по столбцам, а не по строкам. Например, диаграмму продаж товаров х,у,... за последние годы лучше представить в виде:
ПРОДАЖИ | ТОВАР | МЕСЯЦ | КОЛИЧЕСТВО |
х х . х y y . y . | Январь Февраль . декабрь январь февраль . декабрь . | . . . |
а не так, как показано ниже:
ПРОДАЖИ | ТОВАР | КОЛИЧ_ ЯНВАРЬ | КОЛИЧ_ ФЕВРАЛЬ | ... | КОЛИЧ_ ДЕКАБРЬ |
x y . | . | . | ... ... ... | . |
Одна из причин такой рекомендации заключается в том, что при этом значительно проще записываются обобщенные (параметризованные) запросы. Рассмотрите, например, как выглядит сравнение сведений из диаграммы продаж для товара i в месяце m со сведениями для товара j в месяце n, где i, j, m и n — параметры.