powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / null значения
46 сообщений из 46, показаны все 2 страниц
null значения
    #35858054
senleft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использование null значений является спорным вопросом. В разрабатываемой БД я бы хотел максимально отказаться для их использования. Если для полей с числовыми и символьными типами данных в качестве значений по умолчанию можно использовать "0", " ", или "—", то как быть полями с типом данных "дата-время"?
Какие использовать значения по умолчанию, когда, например, неизвестна дата поставки товара? В этом случае без NULL не обойтись?
...
Рейтинг: 0 / 0
null значения
    #35858129
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсли для полей с числовыми и символьными типами данных в качестве значений по умолчанию можно использовать "0", " ", или "—"
Поступать по аналогии.
Вы "договорились", что значение "—" - это "пустое значение для строки".
Выберите себе некую дату, и используйте её как "пустую".

-------------------------
There’s no silver bullet!
...
Рейтинг: 0 / 0
null значения
    #35858299
KRED
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наличие "null" имеет следующие положительные свойсва
: не засоряется индекс
: имееет дополнительную смысловую нагрузку например "ОТСУТСТВИЕ ДАННЫХ"
: занимает меньше места чем данные-заглушки.

Непутайте с данными которые имеют значения по умолчанию !
...
Рейтинг: 0 / 0
null значения
    #35858664
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
senleftИспользование null значений является спорным вопросом.С чего бы?
...
Рейтинг: 0 / 0
null значения
    #35858730
senleft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftsenleftИспользование null значений является спорным вопросом.С чего бы?
авторИспользование понятия NULL в реляционной модели является спорным вопросом. Кодд [77] рассматривает понятие NULL как составную часть этой модели, а дрyrие специалисты считают этот подход неправильным, полаrая, что проблема отсутствующей информации еще не до конца понята, удовлетворительное ее решение не найдено, а потому включение определителя NULL в реляционную модель является преждевременным [87].
БАЗЫ ДАННЫХ Проектирование, реализация и сопровождение Теория и практика. Томас Коннолли
Каролин Бегг
_
Мне интересно с практической точки зрения, кто какие использует (и использует ли) значения-заменители NULL для различных типов данных. А вопрос "использовать - не использовать" - тут мне кажется спорить бессмысленно, каждый решает для себя и ищет рациональное решение.
...
Рейтинг: 0 / 0
null значения
    #35858784
Сергей Фролов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В качестве заменителя - нет, и никогда. Ибо глупость.
Единственное неудобство может быть при использовании той же функции sum, но coalesce или ее аналоги - спасает.
...
Рейтинг: 0 / 0
null значения
    #35858887
dymka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Да по сути вы ничего не меняете, раз null-значения заменяете на специальные. null - тоже специальное значение.
2. Попробуйте посчитать avg по числовым полям, содержащие 0 вместо null. Понятно, что можно использовать where value <> 0, но это уже искусственно.
3. А что, если реально нужно хранить значение 0? Сможете найти такое значение, которое точно не будет нигде использовано?
4. Избавляются от null-ов путем дальнейшей нормализации БД (4/5 НФ, Домен-Ключ итп извраты :), а не заменой их на специальные значения.
5. Теоретики бывают зачастую далеко от практиков. Дейт тоже против null-ов, однако иногда практичнее завести null-значения, нежели соединять десятки таблиц.
...
Рейтинг: 0 / 0
null значения
    #35859003
KOLO-Pokemon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KREDНаличие "null" имеет следующие положительные свойсва
: не засоряется индекс
: имееет дополнительную смысловую нагрузку например "ОТСУТСТВИЕ ДАННЫХ"
: занимает меньше места чем данные-заглушки.

Непутайте с данными которые имеют значения по умолчанию !
Демократия это не только "За" и "Против", но и возможность воздержаться (с)
...
Рейтинг: 0 / 0
null значения
    #35859043
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
senleftmiksoftsenleftИспользование null значений является спорным вопросом.С чего бы?
авторИспользование понятия NULL в реляционной модели является спорным вопросом. Кодд [77] рассматривает понятие NULL как составную часть этой модели, а дрyrие специалисты считают этот подход неправильным, полаrая, что проблема отсутствующей информации еще не до конца понята, удовлетворительное ее решение не найдено, а потому включение определителя NULL в реляционную модель является преждевременным [87].
БАЗЫ ДАННЫХ Проектирование, реализация и сопровождение Теория и практика. Томас Коннолли
Каролин Бегг
_
Мне интересно с практической точки зрения, кто какие использует (и использует ли) значения-заменители NULL для различных типов данных. А вопрос "использовать - не использовать" - тут мне кажется спорить бессмысленно, каждый решает для себя и ищет рациональное решение.Если "интересно с практической точки зрения", то довольно странно ссылаться на сугубо теоретические источники.

Кроме того, вся логика существующих СУБД построена на обработку в качестве особого значения именно NULL. Конечно, в большинстве случаев вы можете с помощью специальных выражений использовать другое значение, но это может выйти вам очень дорого по ресурсам и быстродействию.
...
Рейтинг: 0 / 0
null значения
    #35859142
Фотография darkbird81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
senleftИспользование null значений является спорным вопросом. В разрабатываемой БД я бы хотел максимально отказаться для их использования. Если для полей с числовыми и символьными типами данных в качестве значений по умолчанию можно использовать "0", " ", или "—", то как быть полями с типом данных "дата-время"?
Какие использовать значения по умолчанию, когда, например, неизвестна дата поставки товара? В этом случае без NULL не обойтись?

имхо, идиотский стиль. не отказывайтесь от нул-значений.
работаю с БД, в которых очень часто встречается именно описываемая вами ситуация. сначала долго ругался, сейчас смирился, но все равно рычу мысленно.
например в поле дата-время по умолчанию содержится значение 1876-12-31 00-00-00, и это в полях увольнения/приема на работу, или для даты рождения. приходится в запросах сравнивать даты с днем победы или с днем великой октябрьской революции , потому что хз может в след.версиях БД таки будут нул, а переделывать старые проги желания нет.
опять же, при анализе экономич. или бухгал.данных проблемно понять, 0 -это отсутствие данных или просто значение такое.
...
Рейтинг: 0 / 0
null значения
    #35859248
Дмитрий16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если очень хочется - то можно включить опцию в БД чтобы NULL=NULL было TRUE, возможно это решит ваши проблемы. А спец значения в полях очень сильно зависят от предметной области.
Например для лотереи 6 из 36 число 0 или 37 можно запросто делать "спец числом" а вот в вашей области - вопрос.
...
Рейтинг: 0 / 0
null значения
    #35859326
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий16Если очень хочется - то можно включить опцию в БД чтобы NULL=NULL было TRUEЭто в какой СУБД такое можно?
...
Рейтинг: 0 / 0
null значения
    #35859470
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftДмитрий16Если очень хочется - то можно включить опцию в БД чтобы NULL=NULL было TRUEЭто в какой СУБД такое можно?
Код: plaintext
1.
2.
3.
4.
select @@version;
SET ANSI_NULLS OFF; 
select  1  where null=null;
SET ANSI_NULLS ON; 
select  1  where null=null;

результатMicrosoft SQL Server 2005 - 9.00.3042.00 (Intel X86) ......


(строк обработано: 1)


-----------
1

(строк обработано: 1)


-----------

(строк обработано: 0)

зы. Правда, я этим пока не пользовался.
По старинке привык
...
Рейтинг: 0 / 0
null значения
    #35859543
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Important:
In a future version of SQL Server, ANSI_NULLS will always be ON and any applications that explicitly set the option to OFF will generate an error. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.
так шта....

-------------------------
There’s no silver bullet!
...
Рейтинг: 0 / 0
null значения
    #35859897
Supra93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
darkbird81senleftИспользование null значений является спорным вопросом. В разрабатываемой БД я бы хотел максимально отказаться для их использования. Если для полей с числовыми и символьными типами данных в качестве значений по умолчанию можно использовать "0", " ", или "—", то как быть полями с типом данных "дата-время"?
Какие использовать значения по умолчанию, когда, например, неизвестна дата поставки товара? В этом случае без NULL не обойтись?

имхо, идиотский стиль. не отказывайтесь от нул-значений.
работаю с БД, в которых очень часто встречается именно описываемая вами ситуация. сначала долго ругался, сейчас смирился, но все равно рычу мысленно.
например в поле дата-время по умолчанию содержится значение 1876-12-31 00-00-00, и это в полях увольнения/приема на работу, или для даты рождения. приходится в запросах сравнивать даты с днем победы или с днем великой октябрьской революции , потому что хз может в след.версиях БД таки будут нул, а переделывать старые проги желания нет.
опять же, при анализе экономич. или бухгал.данных проблемно понять, 0 -это отсутствие данных или просто значение такое.
+1
...
Рейтинг: 0 / 0
null значения
    #35859977
адв
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lockyтак шта....

дык, я почему и не пользовался.

не по-людски это, нуллы сравнивать
...
Рейтинг: 0 / 0
null значения
    #35860521
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В разрабатываемой БД я бы хотел максимально отказаться для их использования. И ради бога. Поставь условие, запрещающее использовать NULL, поставь значение по умолчанию и не используй.

Только как ты будешь различать 0, введенный пользователем, и 0 проставленный по умолчанию? Я сейча работаю с такой системой - порой такая возможнеость нужна.

Код: plaintext
1.
2.
------------------------------
!Напрасный труд хуже пьянства!
------------------------------
...
Рейтинг: 0 / 0
null значения
    #35860774
senleft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
U-geneВ разрабатываемой БД я бы хотел максимально отказаться для их использования. И ради бога. Поставь условие, запрещающее использовать NULL, поставь значение по умолчанию и не используй.

Только как ты будешь различать 0, введенный пользователем, и 0 проставленный по умолчанию? Я сейча работаю с такой системой - порой такая возможнеость нужна.

Код: plaintext
1.
2.
------------------------------
!Напрасный труд хуже пьянства!
------------------------------


Ну не везде же я буду использовать "0" как значение по умолчанию, например для поля "Сумма предоплаты" это вполне допустимо - не важно ввел это пользователь или это значение по умолчанию. В каждом отдельном случае - свое решение. Например для дат, значение которых неизвестно, кроме null вредли что-то можно использовать.
...
Рейтинг: 0 / 0
null значения
    #35862234
KOT MATPOCKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
senleft, все-таки поясните, зачем для понятия "значение не задано" придумывать что-то новое?
Либо у Вас так мало проблем, что Вы выдумываете себе новые, либо Вы не такой ("значение не задано") смысл вкладываете в "NULL".
Уточните, пожалуйста
...
Рейтинг: 0 / 0
null значения
    #35862738
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. По поводу выбора значения для даты: посмотрите в мануалах Вашей СУБД, клиента и возьмите максимальную минимальную.
2. U-gene
Только как ты будешь различать 0, введенный пользователем, и 0 проставленный по умолчанию?

+1024
3. Я хоть и сам ярый сторонник юзания NULL'ов, но когда встал вопрос о выборке данных из временного интервала, которые могут содержать NULL, в случае, если неопределено, согласился с "магическими" датами и простым запросом:
Код: plaintext
1.
select SmthField from SmthTable where @DateActual between DateBegin and DateEnd
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
null значения
    #35862779
_ч_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже, но с нулом. По-моему не намного сложнее

select SmthField from SmthTable where @DateActual between DateBegin and ISNULL(DateEnd, GETDATE()+99999)
...
Рейтинг: 0 / 0
null значения
    #35862797
KRED
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select 
    SmthField 
from 
   SmthTable 
where 
   (@DateActual >= DateBegin or DateBegin is null) 
      and 
   (@DateActual <= DateEnd or DateEnd  is null )
...
Рейтинг: 0 / 0
null значения
    #35863264
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRED
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select 
    SmthField 
from 
   SmthTable 
where 
   (@DateActual >= DateBegin or DateBegin is null) 
      and 
   (@DateActual <= DateEnd or DateEnd  is null )
и прощайте, индексы...
...
Рейтинг: 0 / 0
null значения
    #35863382
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft
и прощайте, индексы...

это само - собою... тока вот:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table DateBetween(
  Id tinyint not null,
  DateBegin date null,
  DateEnd date null
)

insert into DateBetween(Id, DateBegin, DateEnd) values ( 1 , '17320222', '17991214')
insert into DateBetween(Id, DateBegin, DateEnd) values ( 2 , '17351030', '18260704')
insert into DateBetween(Id, DateBegin, DateEnd) values ( 3 , '17430413', '18260704')
insert into DateBetween(Id, DateBegin, DateEnd) values ( 4 , '17510316', '18360628')
insert into DateBetween(Id, DateBegin, DateEnd) values ( 5 , '17580428', '18310704')
insert into DateBetween(Id, DateBegin, DateEnd) values ( 6 , '17670711', '18480223')
insert into DateBetween(Id, DateBegin, DateEnd) values ( 35 , '19170529', '19631122')
insert into DateBetween(Id, DateBegin, DateEnd) values ( 42 , '19460819', null)
insert into DateBetween(Id, DateBegin, DateEnd) values ( 43 , '19460706', null)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare
  @DateActual date

set  @DateActual='1960'

select 
  * 
from 
  DateBetween 
where 
   (@DateActual >= DateBegin or DateBegin is null) 
      and 
   (@DateActual <= DateEnd or DateEnd  is null )
выдает
Id DateBegin DateEnd351917-06-291963-11-22421946-08-19null421946-07-06null
а нужно ( в контексте )
Id DateBegin DateEnd351917-06-291963-11-22

_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
null значения
    #35863507
KRED
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft,

про индексы я пока промолчу так как есть более интерестная тема про мой неправильный запрос :-)

что собственно принимать под значением колонок DateBegin,DateEnd "NULL" ?

Если понятие что дата не определена и "открыта" , то запрос нашол все возможные. Тоесть Ваши претензии мне не понятны.
Если считать что данных "нету" то просто убрать условия (OR ... IS NULL) , но свой запрос я привёл по типу запроса

Код: plaintext
select SmthField from SmthTable where @DateActual between DateBegin and ISNULL(DateEnd, GETDATE()+ 99999 )

где из условия видно что если поле DateEnd равно NULL то DateEnd будет охрененно большой и результат будет темже.

А что на счот того "контекста" так моё скромное мнение ... нужно организовать "версионность объектов". Хотя детально в тему не въежал и могу ошибаться.
...
Рейтинг: 0 / 0
null значения
    #35863510
KRED
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

ваша субд не умеет индексировать значения "NULL" ?

или в чом собственно проблема ?
...
Рейтинг: 0 / 0
null значения
    #35863655
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRED
Ваши претензии мне не понятны

Да - приношу свои извинения. Погорячился... Совсем уже запутался с этой историографией... BTW,
KRED
нужно организовать "версионность объектов". Хотя детально в тему не въежал

Ну, дык ... Если ЭстЪ время и желание - вЪедтье и скажите свое веское слово...
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
null значения
    #35863819
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KREDmiksoft,

ваша субд не умеет индексировать значения "NULL" ?

или в чом собственно проблема ?Оракл, например, не хранит в индексе ссылки на записи, которые по всем полям, включенным в индекс, имеют значение NULL.
...
Рейтинг: 0 / 0
null значения
    #35864442
senleft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KOT MATPOCKuHsenleft, все-таки поясните, зачем для понятия "значение не задано" придумывать что-то новое?

Я не придумываю новое значение для понятия "значение не задано".

KOT MATPOCKuHЛибо у Вас так мало проблем, что Вы выдумываете себе новые, либо Вы не такой ("значение не задано") смысл вкладываете в "NULL".
Уточните, пожалуйста
Null я понимаю как "значение не известно".
Я всего лишь хочу избавиться от обработки null там, где это возможно. Например, в своей БД я могу вполне отказаться от null в поле "сумма предоплаты" и подставить значение по умолчанию "0" (не важно ввел ли это значение пользователь или сумма действительно неизвестна, на результат это не влияет). А вот с полем "дата предоплаты" отказаться от null не так уж и просто.
Поэтому я создал эту тему, чтобы узнать как другие поступают в данных ситуациях.
...
Рейтинг: 0 / 0
null значения
    #35865192
KRED
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
senleft
Я всего лишь хочу избавиться от обработки null там, где это возможно. Например, в своей БД я могу вполне отказаться от null в поле "сумма предоплаты" и подставить значение по умолчанию "0" (не важно ввел ли это значение пользователь или сумма действительно неизвестна, на результат это не влияет). А вот с полем "дата предоплаты" отказаться от null не так уж и просто.
Поэтому я создал эту тему, чтобы узнать как другие поступают в данных ситуациях.

Лично я такого же мнения как и вы :-)
Как минимум в двух выше приведённых примерах .
...
Рейтинг: 0 / 0
null значения
    #35865280
Фотография darkbird81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KREDsenleft
Я всего лишь хочу избавиться от обработки null там, где это возможно. Например, в своей БД я могу вполне отказаться от null в поле "сумма предоплаты" и подставить значение по умолчанию "0" (не важно ввел ли это значение пользователь или сумма действительно неизвестна, на результат это не влияет). А вот с полем "дата предоплаты" отказаться от null не так уж и просто.
Поэтому я создал эту тему, чтобы узнать как другие поступают в данных ситуациях.

Лично я такого же мнения как и вы :-)
Как минимум в двух выше приведённых примерах .

дык вроде это называется не авторизбавиться от обработки null там, где это возможно, а просто нормальное проектирование БД. ну не везде же позволять использовать нул, ведь это и так ясно.
...
Рейтинг: 0 / 0
null значения
    #35865910
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KREDsenleft
Я всего лишь хочу избавиться от обработки null там, где это возможно. Например, в своей БД я могу вполне отказаться от null в поле "сумма предоплаты" и подставить значение по умолчанию "0" (не важно ввел ли это значение пользователь или сумма действительно неизвестна, на результат это не влияет). А вот с полем "дата предоплаты" отказаться от null не так уж и просто.
Поэтому я создал эту тему, чтобы узнать как другие поступают в данных ситуациях.

Лично я такого же мнения как и вы :-)
Как минимум в двух выше приведённых примерах .У разработчиков стандарта SQL расходятся мнения с Вашим по части агрегатных функций. ;) В случае с AVG() как раз без NULL-значения будет трудно.
...
Рейтинг: 0 / 0
null значения
    #35867277
KRED
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senya_LУ разработчиков стандарта SQL расходятся мнения с Вашим по части агрегатных функций. ;) В случае с AVG() как раз без NULL-значения будет трудно.

А что мешает с влучае с AVG() отказаться от NULL для этой колонки ?

Если у меня есть ссылка на справочник то я могу использовать NULL , а AVG() как раз и не будет использоваться ... ибо мерять температуру по больнице нет смысла ...

если колонка с данными то нужно решить ставить на неё ограничение НОТ НУЛЛ или нет и от суда топтать в сторону использования АВГ ...

ЗЫ может подскажете в каких моментах использование НУЛЛ и АВГ/СУМ приводит к логической ошибке ?
...
Рейтинг: 0 / 0
null значения
    #35867537
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KREDа AVG() как раз и не будет использоваться ... ибо мерять температуру по больнице нет смысла ...
Хм. Вообще-то средняя величина предоплаты - это не "средняя температура по больнице" и должна считаться безо всяких нулей.
...
Рейтинг: 0 / 0
null значения
    #35867551
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KREDв каких моментах использование НУЛЛ и АВГ/СУМ приводит к логической ошибке ?
SUM поля NULL игнорирует. Поэтому само по себе использование SUM привести к ошибке не может, пока результат выполнения SUM не пытаться интерпретировать не как SUM.
AVG по сути SUM/COUNT, соответственно, беда будет в COUNT. Точнее, в интерпретации того COUNT, который сервер будет использовать в AVG.
Нахождение средней величины предоплаты Вам уже привели в качестве примера.
...
Рейтинг: 0 / 0
null значения
    #35867558
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
senleftНапример, в своей БД я могу вполне отказаться от null в поле "сумма предоплаты" и подставить значение по умолчанию "0"
Как раз все наоборот. Ограничение на значение этого поля - NULL или больше нуля.
...
Рейтинг: 0 / 0
null значения
    #35867585
KRED
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов,

Можно долго спорить на этот счот ... , но я не понимаю почему вы предираетесь к моим словам ...

в Вашем случае это "наверное" не подходит из за присутствия НУЛЛ в колонке , но почему :

авторКак раз все наоборот. Ограничение на значение этого поля - NULL или больше нуля.

Мне не понятно ...
Если принимать под значением НУЛЛ отсутствие платежа , то средние будет считатьса отлично (по присутствующим платежам , а не по всем возможным) ...
Но скажу сразу что легче было бы отказаться в этом случае от НУЛЛ и заноссить в колонку "0" .
Что не будет противоречить логике ... я не прав ?
...
Рейтинг: 0 / 0
null значения
    #35867588
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов
SUM поля NULL игнорирует. Поэтому само по себе использование SUM привести к ошибке не может, пока результат выполнения SUM не пытаться интерпретировать не как SUM.

букварик
Код: plaintext
1.
select count(*), count(sales), count(quota)
count(*) count(sales) count(quota)10109
Код: plaintext
1.
select sum(sales), sum(quota), (sum(sales)-sum(quota)), sum(sales-quota)
sum(sales) sum(quota) (sum(sales)-sum(quota)) sum(sales-quota)2893532270000193532117547

(sum(sales)-sum(quota)) != sum(sales-quota)
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
null значения
    #35867591
KRED
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ВаскецовKREDа AVG() как раз и не будет использоваться ... ибо мерять температуру по больнице нет смысла ...
Хм. Вообще-то средняя величина предоплаты - это не "средняя температура по больнице" и должна считаться безо всяких нулей.

Из каких убеждений вы решили использовать для такого поля значения НУЛЛ ?
...
Рейтинг: 0 / 0
null значения
    #35867714
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft(sum(sales)-sum(quota)) != sum(sales-quota)
Вам не кажется, что сложение и вычитание NULL не то же самое, что SUM по полю, которое может принимать значения NULL?

KREDно я не понимаю почему вы предираетесь к моим словам
Я крайне редко придираюсь к словам из-за спортивного интереса. Возможно, я что-то невнятно объяснил. Тогда спросите об этом подробнее и яснее.

[quot KRED]
Мне не понятно ...
Если принимать под значением НУЛЛ отсутствие платежа , то средние будет считатьса отлично (по присутствующим платежам , а не по всем возможным) ...
Но скажу сразу что легче было бы отказаться в этом случае от НУЛЛ и заноссить в колонку "0" .
Что не будет противоречить логике ... я не прав ?
Во-первых, если Вы говорте о неком поле как о предоплате, то это либо плановое значение предоплаты, либо какая-то очень узкая специфика, потому что предоплат (предварительных платежей) фактически может быть много, а нормальный календарь платежей на одном поле не сделать даже в качестве дипломной работы.
Во-вторых, величина предоплаты либо положительна, либо предоплаты нет вообще. Нельзя заплатить 0 денег, это нонсенс. В этом смысле предоплата от обычного платежа ничем не отличается. Если не пытаться привнести логику, которую еще надо обосновать по месту, то вырисовывается совершенно четкий constraint, который я и написал выше. Чтобы использовать другой constraint, необходимо его обосновать. Вы в состоянии обосновать, что default 0 not null + лишняя логика в запросах будут чем-то лучше?
...
Рейтинг: 0 / 0
null значения
    #35867733
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KREDИз каких убеждений вы решили использовать для такого поля значения НУЛЛ ?
Контора может работать как с использованием предоплаты, так и без использования предоплаты. Предоплата в первом случае составляет 30%. Если Вы будете забабахивать нули в преоплату, то в один прекрасный момент обнаружите, что средняя предоплата почему-то стала 10%, а не 30%, и чтобы все вернуть на круги своя, придется править запросы, которые бы исключали договора без предоплаты из расчета средней предоплаты по договорам. Оно Вам надо?
...
Рейтинг: 0 / 0
null значения
    #35867872
KRED
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов,

по сути мне пока без разницы разрешено ли для предоплаты НУЛЛ или нет ... хотел узнать какой смысл вы в него вкладываете. И по сути наши взгляды схожи !

Но всё началось с того что я ответил

Senya_LУ разработчиков стандарта SQL расходятся мнения с Вашим по части агрегатных функций. ;) В случае с AVG() как раз без NULL-значения будет трудно.

На что я ответил КРЕД
А что мешает с влучае с AVG() отказаться от NULL для этой колонки ?

Если у меня есть ссылка на справочник то я могу использовать NULL , а AVG() как раз и не будет использоваться ... ибо мерять температуру по больнице нет смысла ...

если колонка с данными то нужно решить ставить на неё ограничение НОТ НУЛЛ или нет и от суда топтать в сторону использования АВГ ...

ЗЫ может подскажете в каких моментах использование НУЛЛ и АВГ/СУМ приводит к логической ошибке ?

В этом вы увидели где то красную тряпку ... и ответили мне
Сергей Васкецов
Хм. Вообще-то средняя величина предоплаты - это не "средняя температура по больнице" и должна считаться безо всяких нулей.

??????
...
Рейтинг: 0 / 0
null значения
    #35867897
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KREDпо сути мне пока без разницы разрешено ли для предоплаты НУЛЛ или нет ... хотел узнать какой смысл вы в него вкладываете.
Смысл NULL в предоплате по договору - что по договору не требуется (или не планируется, зависит от постановки) предоплата. Но а) она может быть, даже если и не требуется, б) фактически платежи по предоплате - это отдлельные записи, а не просто одно число.
...
Рейтинг: 0 / 0
null значения
    #35867904
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KREDСергей Васкецов
Хм. Вообще-то средняя величина предоплаты - это не "средняя температура по больнице" и должна считаться безо всяких нулей.
??????
Я имел в виду, что средняя величина предоплаты (особеннов разных разрезах, например, по менеджерам) может иметь вполне обоснованный интерес и не является сферическим конем в вакууме, в отличие от средней температуры по больнице, не имеющей большого смысла.
...
Рейтинг: 0 / 0
null значения
    #35869759
KOT MATPOCKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мое мнение по теме:

Возможность использования NULL-значений в полях - это инструмент. Пользоваться им или нет - решать, наверное, каждому самостоятельно.
Однако, если NULL используется, то нужно дать четкое определение значения NULL для конкретного поля. Если вместо NULL используется другое значение, то тоже нужно определить его понимание и использование.
Далее.
Автор и товарищи упоминают про удобство написания запросов или производительность (индексы), на что я отвечу - по аналогии с нормализацией. Сначала система сторится как нормализованная (+прозрачная +понятная), а потом начинаем заниматься тюнингом производительности и прочего => появляется денормализация.
Так и с NULLами: лучше использовать, но в некоторых отдельных случаях бывает удобнее заменить их на нечто другое: или на некоторое значение или таблицей с подчиненными, в т.ч. отсутствующими записями (неявный NULL).

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

Про теоретиков могу сказать следующее: обычно данные таблицы (сущности, ...) рассматриваются как набор векторов в некотором пространства (размерность задается количеством полей). Тогда возникает вопрос и недопонимание: что значит одна или несколько координат вектора не заданы??!! Отсюда и непонимание теоретиками NULLов (ИМХО, как математика-теоретика в прошлом)
...
Рейтинг: 0 / 0
null значения
    #35965471
Jevgenijs.S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я работаю в сфере хранилищ данных...так вот у нас - в таблицах, данные из которых отображаются в отчетах, все поля not NULL....в плане дат - используем либо очень большую дату, либо очень маленькую - все зависит от использования конкретного поля. А в плане каких-то сумм-amount-ов - я видел такой подход - null заполняют средним значением, например:

Amount
-------
2
4
6
NULL

В таком случаи NULL заполняют 4 = ....(2+4+6)/3


http://www.ralphkimball.com/html/designtipsPDF/DesignTips2003/KimballDT43DealingWith.pdf
...
Рейтинг: 0 / 0
46 сообщений из 46, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / null значения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]