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

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

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

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

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

имхо, идиотский стиль. не отказывайтесь от нул-значений.
работаю с БД, в которых очень часто встречается именно описываемая вами ситуация. сначала долго ругался, сейчас смирился, но все равно рычу мысленно.
например в поле дата-время по умолчанию содержится значение 1876-12-31 00-00-00, и это в полях увольнения/приема на работу, или для даты рождения. приходится в запросах сравнивать даты с днем победы или с днем великой октябрьской революции , потому что хз может в след.версиях БД таки будут нул, а переделывать старые проги желания нет.
опять же, при анализе экономич. или бухгал.данных проблемно понять, 0 -это отсутствие данных или просто значение такое.
...
Рейтинг: 0 / 0
10.03.2009, 11:38
    #35859248
Дмитрий16
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null значения
Если очень хочется - то можно включить опцию в БД чтобы NULL=NULL было TRUE, возможно это решит ваши проблемы. А спец значения в полях очень сильно зависят от предметной области.
Например для лотереи 6 из 36 число 0 или 37 можно запросто делать "спец числом" а вот в вашей области - вопрос.
...
Рейтинг: 0 / 0
10.03.2009, 12:01
    #35859326
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null значения
Дмитрий16Если очень хочется - то можно включить опцию в БД чтобы NULL=NULL было TRUEЭто в какой СУБД такое можно?
...
Рейтинг: 0 / 0
10.03.2009, 12:43
    #35859470
adv
adv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null значения
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
10.03.2009, 13:02
    #35859543
locky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null значения
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
10.03.2009, 14:57
    #35859897
Supra93
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null значения
darkbird81senleftИспользование null значений является спорным вопросом. В разрабатываемой БД я бы хотел максимально отказаться для их использования. Если для полей с числовыми и символьными типами данных в качестве значений по умолчанию можно использовать "0", " ", или "—", то как быть полями с типом данных "дата-время"?
Какие использовать значения по умолчанию, когда, например, неизвестна дата поставки товара? В этом случае без NULL не обойтись?

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

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

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

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

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

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

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


Ну не везде же я буду использовать "0" как значение по умолчанию, например для поля "Сумма предоплаты" это вполне допустимо - не важно ввел это пользователь или это значение по умолчанию. В каждом отдельном случае - свое решение. Например для дат, значение которых неизвестно, кроме null вредли что-то можно использовать.
...
Рейтинг: 0 / 0
11.03.2009, 14:32
    #35862234
KOT MATPOCKuH
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null значения
senleft, все-таки поясните, зачем для понятия "значение не задано" придумывать что-то новое?
Либо у Вас так мало проблем, что Вы выдумываете себе новые, либо Вы не такой ("значение не задано") смысл вкладываете в "NULL".
Уточните, пожалуйста
...
Рейтинг: 0 / 0
11.03.2009, 16:50
    #35862738
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null значения
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
11.03.2009, 17:04
    #35862779
_ч_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null значения
Тоже, но с нулом. По-моему не намного сложнее

select SmthField from SmthTable where @DateActual between DateBegin and ISNULL(DateEnd, GETDATE()+99999)
...
Рейтинг: 0 / 0
11.03.2009, 17:09
    #35862797
KRED
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null значения
Код: 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
11.03.2009, 20:24
    #35863264
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null значения
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
11.03.2009, 21:46
    #35863382
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null значения
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
11.03.2009, 23:46
    #35863507
KRED
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null значения
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 значения / 25 сообщений из 46, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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