Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Стоит ли В справочнике иметь "пустой" элемент, для того чтобы в полях , использующих этот справочник поставить признак "Обязательное". Т.е. Пусть есть таблица "Клиенты" и таблица "Города" В таблице "Клиенты" поле "ИзГорода" - ВК на "Города" Бывает что не известно из какого города клиент, соответсвенно "ИзГорода"=NULL, тогда в запросе придётся использовать LEFT JOIN, а если сделать "ИзГорода" обязательным и в "Города" добавить "---", тогда INNER JOIN. Вопросы : Кто как ? Почему? IMHO, Mon$te® ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 13:07 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Ну не зря же существует null. Он строго означает "нет значения", а все другое - зависит от контекста. Т.е. в общем случае придется для каждой сущности иметь свое значение "Null" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 13:15 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
4d_monsterВопросы : Кто как ? Почему? Иногда отсутствие NULL повышает производительность запросов (типа при where field_name is null индексы не работают). Но все это надо взвешивать в каждом конкретном случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 13:36 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Спасиббо за ответы. Пример утрирован. По логике задачи мне казалось что надо использовать и null и " - - - ". Но было "пожелание единообразия ... и посмотреть что без null лучше...". Как только стал вводить тестовые строки (прям в таблицы), понял: надо и то и другое. IMHO, Mon$te® ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 13:41 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
некоторые утверждают что присутствие null свидетельствует об ошибке проектирования. Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 14:31 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
> По логике задачи мне казалось что надо использовать и null и " - - - ". По логике задачи нет и не может быть null значений и тем более непонятных значений "---". Описанные связи огранизуются только и исключительно посредством третьей таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 14:58 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Абсолютно правильная система (идеальная, как идеальный газ): 1. не должна иметь null 2. для ввода первичных данных должен использоваться только insert (никаких update и delete не должно быть вообще в системе) 3. для отчетов и вывода данных использовать только select В принципе это реализуемо, но на практике не всегда целесообразно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 15:16 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
2 Роман Дынник 2 Old Nick Что-то я не въехал. Это новогодний прикол? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 15:44 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Поясню для непонимающих приколов :-) 1. Можно реализовать города в виде папок, тогда клиентов можно хранить кроме папки Клиенты еще и в конкретных городах, как в папках. При этом не значит что клиентов будет 2, просто ссылка на клиента будет в двух папках. В таком случае если какой-то клиент находится только в папке Клиенты, это значит что город для него еще не определен. В дальней его можно будет поместить в конкретную папку Город. Почитайте Анатолия Тенцера, у него это хорошо описано. И у меня сделано так же. 2. Часто для изменения данных используют update записи, но если мы хотим хранить всю историю изменений, то можно просто добавлять еще одну запись с указанием даты изменения. В таком случае ни одна редакция объекта не пропадет. Только это нужно не всегда и не везде. Некоторые объекты не требуют истории хранения, а в некоторых случаях нет смысла добавлять запись, если мы просто ошиблись в наименовании и хотим поправить. Тоже не менее часто необходимо удалять объекты не физически, а логически, чтобы иметь возможность восстановления записи. Для этого достаточно создать создать таблицу Deleted и помещать туда указатели на удаленные объекты. 3. При правильно построенной архитектуре сложные выборки будут не нужны, только группировки с вычислениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 16:07 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
1. Понял очень смутно, видимо привык объясняться в терминах реляционной модели, т.е. в таблицах. Однако насчет null - абсолютно несогласен, это в порядке вещей и очень даже логично 2. Конечно можно и так, но как раз по моему опыту, история изменений часто храниться только определенный период (на случай разборок или отката неправильных изменений). В этом случае в основной таблице храниться только текущее значение, а в исторической - предыдущая, причем историческая периодически очищается от старых значений. Если мы будем в основной таблице только вставлять записи, то она будет шибко расти. Так что все зависит от задачи. 3. Против SELECT для запросов я и не возражал, только непонятно - сложная выбока и SELECT - это не одно и то же? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 16:21 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Я ведь написал, что это в идеале :-) На практике полностью придерживаться этих правил далеко не всегда целесообразно -------------------- Не учи отца и баста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 16:23 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
tru55 А знаешь откуда взялся на самом деле null? Его ведь не специально придумали. Возмем к примеру таблицу в которой хранится вся информация базы, как она будет выглядеть? Table_ID Column_ID Row_ID Value так вот, если у нас в какой-то ячейке пользовательской таблицы значение null, то это значит, что для этой ячейки нет записи в вышеприведенной таблице и при формировании пользовательской таблицы в этом месте просто получается дыра. Это можно хорошо проследить если поработать с кубами (OLAP). Именно поэтому -------------------- Не учи отца и баста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 16:29 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
С OLAP не работал, спорить не буду. Однако простой пример (из любимой Oracle обучалки) - для простоты. Есть отделы department dep_id dep_name Есть служащие employees emp_id emp_name dep_id где dep_id - внешний ключ на department Завожу я служащего, который еще не приписан к отделу. Что в таком случае должно содержать dep_id ? И ведь подобных случаев масса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 16:36 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
А ведь служащий может быть не к одному отделу приписан. Допустим я в отделе ИТ и при этом мне не хватает денег и я решил подрабатывать техничкой по вечерам, а потом еще и сторожить по ночам :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 16:39 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
> Однако простой пример (из любимой Oracle обучалки) Для "обучалки" такой пример подойдет. Для проектирования - нет. Учите матчасть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 16:55 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
2 tru55 > 2 Роман Дынник > 2 Old Nick > > Что-то я не въехал. Это новогодний прикол? Ага. Приколисты. Как они, интересно, собираются работать без null с таким случаем: "на сегодня не введен курс рубля к баксу" --- ping eblan.us ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 16:58 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
:-))))))))))))))))))))))))))))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 17:06 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Old NickА ведь служащий может быть не к одному отделу приписан. Допустим я в отделе ИТ и при этом мне не хватает денег и я решил подрабатывать техничкой по вечерам, а потом еще и сторожить по ночам :-) Понятно, что в этом случае связь будет реализована через третью таблицу. Я говорил про случай, когда связь четко один-к-одному. Или вы полагаете, что в реальных системах такого не бывает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 17:09 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Однако простой пример (из любимой Oracle обучалки) Для "обучалки" такой пример подойдет. Для проектирования - нет. Учите матчасть. А чем такой пример нереален? И почему вы думаете, что я новичек в БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 17:11 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Бывает конечно, при упрощении модели. Если допустим нам в системе понадобился набор из 10 сущностей, которые наследуются от одной базовой и отличаются от нее одним единственным полем, то вместо огорода из 11 таблиц (одна для базовой сущности, и 10 для наследников, в каждой из которых по одному дополнительному полю) можно хранить все эти сущности в одной таблице и для записей относящихся к другим типам проставлять в поле NULL. -------------------- Не учи отца и баста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 17:13 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
на сегодня не введен курс рубля к баксу хранение null и проверка на null это разные вещи. Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 17:14 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
tru55, я не говорю что примеры приведенные Вами нельзя реализовывать. Вполне возможно и допустимо. Просто меня что-то понесло сегодня :-) -------------------- Не учи отца и баста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 17:23 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Такое бывает довольно часто. Я поступаю так. Допустим имеется таблица Люди и справочник Города Люди (Имя char not Null, КодГорода int not Null default 0) Города (КодГорода Int identity (0,1), Имя Null) В Городах имею запись (0,Null) Для людей, у которых неизвестен Город - КодГорода=0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 17:29 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
А если нужно вывести отчет по людям в городе и при этом пользователь должен подставить город выбрав его из справочника? Если не выбрать никакой город, то как вести себя? Вывести все записи или те что с 0? Лучше иметь в справочнике неопределенный город и подставлять его по-умолчанию. Красивее получается. -------------------- Не учи отца и баста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 17:33 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
> А чем такой пример нереален? Почему нереален? Если Вы говорите, что он есть в учебной бд, то он наверняка там есть. Его реальность сомнений не вызывает. > И почему вы думаете, что я новичек в БД? Я ничего по этому поводу не думаю. Я просто ответил на Ваш вопрос. "Учите матчасть" относится к тому, что вопрос использования null значений освещается практически в любой литературе по реляционным базам данных, потрудитесь прочесть хоть что-нибудь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 17:43 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Серега 4d_monsterВопросы : Кто как ? Почему? Иногда отсутствие NULL повышает производительность запросов (типа при where field_name is null индексы не работают). Почему это не работают? Очень даже работают на такой запрос, если по нему хорошая селективность. Только что проверил. По полю был уникальный индекс с разрешенным NULL, записей с NULL около 1% По запросу WHERE field_name IS NULL индекс на ура подхватился. (Сервер ASA 8) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 17:57 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Забавно. Уже давно известно насколько плохой практикой является применение magic numbers в программировании. Но тут готовы вместо честных NULL применять некие "магические" записи ничтоже сумняшеся. Воистину сказано - опыт учит нас тому что он ничему нас не учит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 18:21 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Old NickА если нужно вывести отчет по людям в городе и при этом пользователь должен подставить город выбрав его из справочника? Если не выбрать никакой город, то как вести себя? Вывести все записи или те что с 0? Лучше иметь в справочнике неопределенный город и подставлять его по-умолчанию. Красивее получается. Я думаю, мы можем придумать массу примеров, где null выгоден или невыгоден. Например, в данном случае, если давать пользователю возможность выбора из списка, то выгоден неопределенный город (хотя я всегда реализовывал это, подставляя label списка = чего-то осмысленное, а в значении списка - null). Но достаточно часто приходится выбирать данные с условием IS NULL, так вот тогда нам нужен список неопределенных значений для каждой сущности (о чем я написал в первом посте) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 18:24 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
да, блин... неудачно пошутил :-) Под новый год не у всех все в порядке с юмором. Плюньте и разотрите. И делайте как нравится и не смотрите на других. У каждого в голове свои тараканы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2004, 18:34 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Чтобы героически не боротся с NULL у меня почти во всех справочниках есть: Код: plaintext 1. и этот нолик прекрасно к тому же подставляеться как умолчание при автоматическом или ручном заполнении таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2004, 20:43 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Matt JuntunenDate с Вами :) ЗоринАндрейНо не с Вами ;) Кодд же, согласился бы. А насчет magic numbers это, IMHO, Вы зря, здесь не тот случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2005, 03:44 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
ChAА насчет magic numbers это, IMHO, Вы зря, здесь не тот случай. Чем это он другой? Если в примере Matt-а замените нолик на -1 или 999999 - смысл от этого не изменится. Когда я вижу NULL - это означает "нет данных" однозначно. А если я увижу 0 то естественно придется задать вопрос - это что? И выслушать объяснения о том как оно замечательно подставляется, как защищены от удаления/изменения обязательные записи в каждом справочнике, как они создаются при инициализации базы и т.д. и т.п. Для решения одной надуманной проблемы столько лишних телодвижений. ИМХО, если вам не нравятся NULL, значит вы просто не умеете их готовить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2005, 11:26 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
ЗоринАндрейЧем это он другой?Возможно, мы имеем разночтения относительно понятия "magic numbers". IMHO, это относится к значениям жестко зашитым в программном коде, но если значение определяется через именованную константу, то оно не относится к magic numbers. Соответственно, если поведение системы можно изменить практически без рекомпиляции, то это не повод говорить о magic numbers. Практически во всех СУБД значения по умолчанию либо именованные, то есть, фактически представляют собой константу, либо привязано к описанию user defined type, опять же поименованному. Таким образом, если быть последовательным, то надо утверждать, что константы есть зло и от них надо избавляться, а кто пользуется ими, тот ничего не смыслит в программировании. Следовательно, все, кто вводит в обращение и поддерживает использование констант, или default, а это "ничтоже сумняшеся" все производители программных продуктов - безграмотны. ЗоринАндрейДля решения одной надуманной проблемы столько лишних телодвижений.Насколько она надуманна - отошлю Вас к Date, мне, простите, неинтересно, повторять здесь его рассуждения, с которыми, до определенной степени, согласен. ЗоринАндрейесли вам не нравятся NULL, значит вы просто не умеете их готовитьРади красного словца и т.д. ? Мне действительно не нравятся NULL, но, поверьте на слово, "готовлю" их не хуже Вас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2005, 16:53 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
ChA ЗоринАндрейДля решения одной надуманной проблемы столько лишних телодвижений.Насколько она надуманна - отошлю Вас к Date, мне, простите, неинтересно, повторять здесь его рассуждения, с которыми, до определенной степени, согласен.По всей видимости, для Вас авторитет тот, кто пишет толстые фолианты и громче всех кричит с различных трибун, так? Дейт допустил огромное количество ошибок, он умудряется противоречить себе, любимому, непростительно часто. В теории он откровенно слаб. Если не верите, то сравните, например, работы Ульмана и Дейта. В том что касается "проблемы" NULL, то это теоретическая "проблема" и здесь ссылки на Дейта... не имеют силы. NULL и трехзначная логика существуют объективно, вне нашего желания или наших представлений. И сводить "проблему" NULL к проектированию БД - это просто непонимать существа. Попробую пояснить простым примером. Допустим нам надо выбрать из двух таблиц Код: plaintext 1. 2. Код: plaintext 1. 2. 3. Значения NULL необходимо использовать и в тех случаях, когда значение одного из полей неизвестно. NULL корректно обрабатывается в агрегатных функциях, в отличие от DEFAULT-значений. Например, представьте, что в таблице FAMILIES поле BIRTHDAY является nullable. Если мы не знаем возраст члена семьи, то оставляем в этом поле значение NULL. Теперь изменим ситуацию, сделаем это поле not null, со значением по умолчанию, например, 01.01.1800. В результате нам становится сложнее найти сотрудника, у которого самый взрослый сын, поскольку мы должны не забыть удалить из выборки тех, кто имеет значение по умолчанию. Но хорошо, если мы знаем об этой "особенности" БД. А если не знаем, то результат выборки может оказаться неправильным. Аналогично можно рассмотреть связи между таблицами. Эти связи (объективно!) могут быть трех видов: детерминированные (FK входит в состав PK), обязательные (FK not nullable, но не входит в PK) и необязательные (FK nullable). Последний случай показывает, что внешний ключ (FK) может не ссылаться на запись в master-table. Как и в случае с DEFAULT здесь можно использовать паллиативное решение и создать дополнительную (промежуточную) таблицу, которая будет ссылаться и на master-table и на detail-table. Это устранит необходимость в хранении "пустых" ссылок. Однако такое решение усложнит структуру БД и, соответственно, повысит сложность запросов к БД. Но во имя чего? Запросы все равно будут содержать NULL в тех полях, значения которых неизвестны, но этого придется специально добиваться с помощью различных OUTER JOIN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 11:55 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
> Дейт допустил огромное количество ошибок, он умудряется противоречить > себе, любимому, непростительно часто. Цитаты - в студию. > Что вернет запрос в полях F.FIRST_NAME, F.LAST_NAME, F.BIRTHDAY, если у > сотрудника нет детей или возраст детей не соответствует критериям выборки? > Конечно, NULL. Есть ли альтернатива? А как это Дейту противоречит, позвольте полюбопытствовать? Данные должны _храниться_ без значений null. Потому как null невозможно достоверно интерпретировать: это отсутствие данных как таковых (по целому ряду причин), тупоголовость оператора, ошибка СУБД или что-то еще. А вот в Вашем запросе null интерпретируется абсолютно однозначно. Почувствуйте разницу. > здесь можно использовать паллиативное решение и создать дополнительную > (промежуточную) таблицу, которая будет ссылаться и на master-table и на > detail-table. Это устранит необходимость в хранении "пустых" ссылок. Об этом и говорилось. > Однако такое решение усложнит структуру БД и, соответственно, повысит > сложность запросов к БД. Конечно. > Но во имя чего? А Вы сами что по этому поводу думаете? > Запросы все равно будут содержать NULL в тех полях, > значения которых неизвестны, но этого придется специально добиваться с > помощью различных OUTER JOIN. Не будет неизвестных полей. В принципе. См. выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 13:23 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
OK, есть таблица допустим значений датчиков температуры. Поля: id - Идентификатор записи, может быть например timestamp t1 - температура 1 датчика t2 - температура 2 датчика t3 - температура 3 датчика t4 - температура 4 датчика t5 - температура 5 датчика Данные собираются различными датчиками. Если не испльзовать NULL, как обозначить факт отсутствия данных? Ввести еще 5 полей? Как потом считать средние значения, дисперсию итп(0 - не катит, испортит статистику, -1, 9999, итп тоже) "Прежде чем убить человека, узнай, нет ли у него влиятельных родственников" (с) Библия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 13:52 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
hell. Вообще-то первоначальный вопрос был про значения полей по которым может осущетвлятся соединение таблиц или поиск В Вашем примере никто на необходимость NULL не посягает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 14:38 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Всё пошло с Old NickАбсолютно правильная система (идеальная, как идеальный газ): 1. не должна иметь null 2. для ввода первичных данных должен использоваться только insert (никаких update и delete не должно быть вообще в системе) 3. для отчетов и вывода данных использовать только select ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 14:51 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
> Всё пошло с И в общем совершенно справедливо сказано. Посмотрите, насколько информативнее будет база данных для Ваших датчиков, спроектированная по приведенным Old Nick правилам. Imho схема может примерно такой: таблица таймера, таблица датчиков, таблица значений температуры датчиков (связи, думаю, понятны), таблиц ошибок (связи тоже понятны; можно с таблицей типов ошибок). Никаких null. Плюс хранение ошибок. Среднее, дисперсию и пр. считать - без проблем. Добавление новых датчиков - без изменения структуры данных. Другое дело, что Вам для Вашей задачи не нужна ни обработка ошибок, ни новые датчики. А критична, например, скорость вставки или размер таблицы. Вы находите компромисс в виде приведенного Вами решения. С null значениями. Работает? - работает. Ценой того, что ошибки Вы не обрабатываете (т. е., не фиксируете, например, штатную остановку датчика (ремонт, замена) или аварийную). Устраивает Вас такое решение? - замечательно. Но при этом не стоит говорить, что используемое Вами решение единственно возможное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 15:42 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
guest_20040621 SemaphoreДейт допустил огромное количество ошибок, он умудряется противоречить себе, любимому, непростительно частоЦитаты - в студиюПочитайте его определения функциональных зависимостей, описания уровней изоляции, выбора ключей, распределенных систем и... рассуждения по трехзначной логике. И сравните эти опусы с работами тех, кто знает то, о чем пишет. guest_20040621 SemaphoreЧто вернет запрос в полях F.FIRST_NAME, F.LAST_NAME, F.BIRTHDAY, если у сотрудника нет детей или возраст детей не соответствует критериям выборки? Конечно, NULL. Есть ли альтернатива?А как это Дейту противоречит, позвольте полюбопытствовать?Любопытство не порок... Дейт "Введение в системы баз данных", К. Диалектика, 1998 г. (стр. 118) Но хотелось бы внести ясность: по нашему мнению, null-значения - целая теория трехзначной логики, на которой они базируются, - являются фундаментальным заблуждением и не должны иметь места в чистой формальной системе, такой какой подразумевается реляционная модель... Но нужно также подчеркнуть, что другие авторы полагают совсем противоположное: в частности, Кодд фактически рассматривает null-значения как неотъемлемую часть реляционной модели (подразумевается работа Codd E.F. The Relational Model for Database Management Version 2)Как видите, Дейт с легкостью вообще исключил NULL из реляционной модели, а Вы хотите, чтобы выборка из РБД возвращала NULL... guest_20040621Данные должны _храниться_ без значений null. Потому как null невозможно достоверно интерпретировать: это отсутствие данных как таковых (по целому ряду причин), тупоголовость оператора, ошибка СУБД или что-то еще. А вот в Вашем запросе null интерпретируется абсолютно однозначно. Почувствуйте разницуИ в моем запросе, и в таблице NULL означает только одно - отсутствие данных и никакой другой интерпретации нет! guest_20040621 SemaphoreНо во имя чего?А Вы сами что по этому поводу думаете?Я думаю, что "сон разума рождает чудовищ"... guest_20040621 SemaphoreЗапросы все равно будут содержать NULL в тех полях, значения которых неизвестны, но этого придется специально добиваться с помощью различных OUTER JOIN.Не будет неизвестных полей. В принципе. См. выше.Вы хотите сказать, что если запрос вернул NULL, то Вам известно значение, которое скрывает этот NULL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 15:43 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Всё пошло с И в общем совершенно справедливо сказано. Посмотрите, насколько информативнее будет база данных для Ваших датчиков, спроектированная по приведенным Old Nick правилам. Imho схема может примерно такой: таблица таймера, таблица датчиков, таблица значений температуры датчиков (связи, думаю, понятны), таблиц ошибок (связи тоже понятны; можно с таблицей типов ошибок). Никаких null. Плюс хранение ошибок. Среднее, дисперсию и пр. считать - без проблем. Добавление новых датчиков - без изменения структуры данных. Отлично. Пусть в определенный момент ошибка контроллера одного из датчиков. Датчик не отвечает вообще. Что пишем в таблицу значений? Или делаем таблицу id датчика timestamp значение и pk по первым двум? Получаем в момент времени t 4 записи, сбойный не записываем. Великолепно, и даже понять можно. Теперь напишите мне одним запросом как вернуть среднее скользящее значение по каждому датчику(т.е. (текущий+предыдущий+следующий)/3) для каждого момента времени, когда осуществлялось считывание. Представляю, 5 вложенных селектов. Очень изящно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 15:55 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
> Почитайте его определения функциональных зависимостей, описания уровней > изоляции, выбора ключей, распределенных систем и... рассуждения по > трехзначной логике. "Введение в базы данных" - это академическая работа, цель которой - концептуальное изложение, а не фактические рекомендации. Возможно, где-то есть не слишком оправданные допущения. Общего смысла они не меняют. > И сравните эти опусы с работами тех, кто знает то, о чем пишет. Например? > И в моем запросе, и в таблице NULL означает только одно - отсутствие данных и > никакой другой интерпретации нет! Вы ошибаетесь. Что null означает в таблице, сказать невозможно. А в Вашем запросе null означает ответ на вполне конкретный вопрос. > Вы хотите сказать, что если запрос вернул NULL, то Вам известно значение, > которое скрывает этот NULL? Вы сами привели пример запроса, ответ на который "у сотрудника нет детей или возраст детей не соответствует критериям выборки". Здесь null - единственно логически возможные значения. _Однозначно_ интерпретируемые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 15:58 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
> Пусть в определенный момент ошибка контроллера одного из датчиков. Датчик не > отвечает вообще. Что пишем в таблицу значений? Разумеется ничего. А в таблицу ошибок пишем код таймера, код датчика и код ошибки "ошибка контроллера датчика". > Получаем в момент времени t 4 записи, сбойный не записываем. Правильно. > Представляю, 5 вложенных селектов. Да, именно так. > Очень изящно Что вызывает Ваш сарказм, позвольте полюбопытствовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 16:06 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
guest_20040621"Введение в базы данных" - это академическая работа, цель которой - концептуальное изложение, а не фактические рекомендации. Возможно, где-то есть не слишком оправданные допущения. Общего смысла они не меняютАкадемическая работа?!! С каких пор безграмотность стала признаком "академичности"? guest_20040621 SemaphoreИ сравните эти опусы с работами тех, кто знает то, о чем пишетНапример?Я называл Ульмана, из российских можете почитать Когаловского (старшего). guest_20040621 SemaphoreИ в моем запросе, и в таблице NULL означает только одно - отсутствие данных и никакой другой интерпретации нет!Вы ошибаетесь. Что null означает в таблице, сказать невозможно. А в Вашем запросе null означает ответ на вполне конкретный вопрос.NULL в таблице означает отсутствие данных, NULL в результате запроса означает то же самое. Если Вы не согласны, то дайте свою интерпретацию NULL в таблице и результате запроса. Тогда и поговорим. guest_20040621 SemaphoreВы хотите сказать, что если запрос вернул NULL, то Вам известно значение, которое скрывает этот NULL?Вы сами привели пример запроса, ответ на который "у сотрудника нет детей или возраст детей не соответствует критериям выборки". Здесь null - единственно логически возможные значения. _Однозначно_ интерпретируемые.Так NULL и означает, что информации нет, тоже самое и в таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 16:12 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Как вы думаете, 5 циклов перебора, суммирования, деления займет столько же времени сколько 1 перебор, пять суммирований, пять делений? На хранение уйдет в 5 раз больше служебной информации и медленней выборка по составному индексу. И эта система будет идеальней. Ну-ну. "Прежде чем убить человека, узнай, нет ли у него влиятельных родственников" (с) Библия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 16:15 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
> Академическая работа?!! С каких пор безграмотность стала признаком > "академичности"? ;) > NULL в таблице означает отсутствие данных, NULL в результате запроса означает > то же самое. Если Вы не согласны, то дайте свою интерпретацию NULL в таблице > и результате запроса. Тогда и поговорим. Что, собственно, я и сделал в [1225597]. ОК, если читать недосуг, еще раз: null в таблице означает именно отсутствие данных. Т. е., их нет. Вообще. Никаких. И совершенно непонятно, почему. А null в Вашем запросе означает отсутствие у сотрудников детей определенного возраста. Т. е. несет абсолютно определенную смысловую нагрузку. > Так NULL и означает, что информации нет, тоже самое и в таблице. Дружище, пока Вы не поймете разницу между отсутствием информации и отрицательным ответом на вопрос, нет смысла дискутировать. > Как вы думаете, 5 циклов перебора, суммирования, деления займет столько же > времени сколько 1 перебор, пять суммирований, пять делений? Не знаю. Если интересно, пробуйте. > На хранение уйдет в 5 раз больше служебной информации и медленней выборка > по составному индексу. Хех, ну вот тут Вы, любезный, лукавите. Потому как совершенно непонятно, что с чем сравнивается. Если просто размер таблицы, - так это глупость. Приведите техническое задание, - разговор будет предметным. Есть масса способов сделать выборку быстрой, если Вас это заботит. Например, экстенсивно: держать очень небольшую таблицу оперативных данных. Ы? ;) > И эта система будет идеальней. Ну-ну. Нет, эта система не будет идеальной. Эта система будет оптимальной по удобству эксплуатации и сопровождения. Кроме того, если Вы заметили, то описанная мной структура данных решает как бы отличную от Вашей задачу: она фиксирует и состояние датчиков, и их показания. Плюс бесплатные бонусы в виде возможности: описания характеристик датчиков, точности измерения, хронологии изменений и пр. И всего пара-тройка лишних таблиц. ;) Ну, может, немного побольше. ;)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 18:07 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
SemaphoreПо всей видимости, для Вас авторитет тот, кто пишет толстые фолиантыА для Вас, по видимому, Вася Пупкин ? Или пишущий не менее толстые фолианты Когаловский или Ульман сотоварищи ? Будьте последовательны, отрицая авторитеты. SemaphoreДейт допустил огромное количество ошибок, он умудряется противоречить себе, любимому, непростительно частоПозвольте посмотреть хотя бы на список Ваших работ ? Кроме того, приведите, если уж на то пошло, цитату из Date, где он заблуждается относительно NULL ? Он отрицает NULL ? Так, собственно, об этом и речь, хотя это и неверное понимание, о чем и говорит guest_20040621Данные должны _храниться_ без значений null. Потому как null невозможно достоверно интерпретировать: это отсутствие данных как таковых (по целому ряду причин), тупоголовость оператора, ошибка СУБД или что-то еще.Это как раз то, о чем и говорит Date, что отсутствие значения не является значением, смысл NULL определяется совершенно произвольно, в зависимости от ситуации, что Вы, кстати, иллюстрируете своим собственным примером. Вы определяете смысл для NULL, но представим, что оператор, получив его, должен понять, какой из них верен, только на основе результата выполнения запроса ? Для того, чтобы понять, ему надо знать контекст, в данном случае, вид запроса и, возможно даже, исходные данные, для правильной интерпретации полученных NULL. Date и предлагает заменять незнание значения реальным значением, которое имеет конкретный смысл для определенного типа данных, что отличается от отсутствия значения, для которого тип, вообще говоря, неопределен в принципе и может предполагаться только из контекста. Математика, в отличие от естественного языка как раз тем и отличается, что верность утверждений не зависит от контекста использования ее конструкций. Введение NULL в SQL противоречит формальной теории РМД, так как вводит понятие, зависящие от контекста. Именно это обстоятельство и привело Date к предложению замены неизвестного значения на нечто конкретное, грубо говоря - это как в математике был введен 0, который абсолютно равноправен с остальными числами, хотя в реальной жизни он обычно не имеет смысла. Не говорят "у меня 0 яблок", говорят - "у меня нет яблок", при этом что важно - яблок (!), а не груш, апельсинов и т.д. Неизвестное значение отличается от отсутствия значения, если Вы этого не понимаете, то здесь ничем помочь не могу, значит надо больше читать и много думать. Кстати, не менее уважаемый Ульман со товарищи тоже упоминает о неоднозначности интерпретации NULL, просто он не стал заострять на этом внимание, так как он писал учебник, а не монографию. В учебниках редко поднимаются спорные вопросы теории, а просто излагают превалирующее мнение, но это из другой оперы. SemaphoreОднако такое решение усложнит структуру БД и, соответственно, повысит сложность запросов к БД.Да ради Бога, когда ситуация можно разрешить с помощью использования NULL, то почему не использовать. Надо только помнить, что это не потому, что NULL - это правильно, а потому, что ни одна СУБД не поддерживает механизма неизвестных значений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 20:49 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Кстати, пока за памятью. Даже в VB есть две различные функции - IsNull и IsEmpty, их применение имеет несколько разный контекст. В первом случае - отсутствие значения, во втором - неприсвоенное, или неизвестное, значение. Вот ведь уроды, и зачем путают людёв ? P.S. guest_20040621, респект за поддержку :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 21:08 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
> Это как раз то, о чем и говорит Date В данном конкретном случае мнение Дейта, Ваше и мое совпадают. ;) > Вы определяете смысл для NULL [] Это частный случай. Да, иногда в контексте запроса null приобретает смысл, но это редкая ситуация. Может, я недостаточно прямо выразился: моя позиция заключается в том, что значений null нужно избегать везде, где возможно. > Date и предлагает заменять незнание значения реальным значением, которое > имеет конкретный смысл для определенного типа данных, что отличается от > отсутствия значения, для которого тип, вообще говоря, неопределен в принципе > и может предполагаться только из контекста. А вот здесь - пожалуй, поспорю. Т. е. формально, возможно, Дейт предлагает лучшее из возможных решений (на самом деле, это решение вполне можно привести к продакшн путем некоторых дополнительных структур данных), но так или иначе это [псевдо]реальное значение останется контекстно-зависимым, что меня лично не устраивает. И я в 99% случаев предпочту более сложную структуру данных структуре с использованием null значений. > Неизвестное значение отличается от отсутствия значения, если Вы этого не > понимаете, то здесь ничем помочь не могу, ;) Дружище, прочтите Дейта еще раз. Потом - еще раз топик, можно начиная со второй страницы. ;)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2005, 21:31 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
guest_20040621Я писал не для Вас, просто использовал Вашу цитату, практически весь текст был для Semaphore ;) guest_20040621возможно, Дейт предлагает лучшее из возможных решений ... И я в 99% случаев предпочту более сложную структуру данных структуре с использованием null значений.IMHO, надо отталкиваться от активного использования доменов (user defined type), о чем неоднократно упоминает Date, и в рамках домена должно быть значение, которое играет роль неизвестного значения. И тогда утверждением guest_20040621[псевдо]реальное значение останется контекстно-зависимымможно будет смело пренебречь. Если же говорить о том, что на практике, сплошь и рядом, для совершенно разных по смыслу типов данных используется один и тот же системный тип, то тогда действительно приходится учитывать контекст. Собственно, мы говорим об одном и том же, принципиальных разногласий не вижу. Или они есть ? С уважением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2005, 01:10 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Хотелось бы чуток подправить мнение о том, что Дейт совсем уж считает, что без NULL легко можно обойтись. Просто процитирую его 6 издание, стр. 582: "автор согласен с тем, что проблема отсутствующей информации еще не полностью исследована и пока не существует удовлетворительного решения данной проблемы." Лично у меня в свое время после прочтения его рассуждений о NULL осталось впечатление нормального подхода автора: есть проблема, есть строго научный аспект, есть практический аспект, а дальше - думайте сами. В целом. согласен с гг. ChA и guest_20040621 по поводу того, что хотя использовать NULL можно и иногда нужно, необходимо четко понимать суть проблемы (в т.ч. теоретическую) и считать использование NULL скорее вынужденной мерой, чем отличным решением "на все времена". Г-н Semaphore, я не фанат Дейта, но считаю, что пытаться вытирать о него ноги не стоит. Тут вы скорее свой "имидж" резко уронили до пустозвонства, ибо делать заявления типа вашего "походя" просто недопустимо. Именно вот так это несерьезно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2005, 07:18 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
guest_20040621null в таблице означает именно отсутствие данных. Т. е., их нет. Вообще. Никаких. И совершенно непонятно, почему. А null в Вашем запросе означает отсутствие у сотрудников детей определенного возраста. Т. е. несет абсолютно определенную смысловую нагрузкуПовторю, NULL в результате запроса и таблице означает одно и тоже: ОТСУТСТВИЕ ИНФОРМАЦИИ. NULL будет присутствовать не только у сотрудников, у которых дети имеют иной возраст, но и у тех сотрудников, у которых в БД нет информации о детях. Строго говоря, NULL означает, что требуемой информации нет. guest_20040621 SemaphoreТак NULL и означает, что информации нет, тоже самое и в таблице.Дружище, пока Вы не поймете разницу между отсутствием информации и отрицательным ответом на вопрос, нет смысла дискутировать.NULL – это не отрицательный ответ на вопрос. "Отрицательный ответ" - это Ваша интерпретация отсутствия информации, как результат исполнения запроса. Вы пытаетесь поставить знак равенства между отрицательным ответом и пустым множеством, что не есть правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2005, 10:31 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
ChA SemaphoreПо всей видимости, для Вас авторитет тот, кто пишет толстые фолиантыА для Вас, по видимому, Вася Пупкин ? Или пишущий не менее толстые фолианты Когаловский или Ульман сотоварищи ? Будьте последовательны, отрицая авторитеты.Не надо мне приписывать то, что я не делаю. Для меня авторитетом является тот, кто понимает то, о чем говорит или пишет. Ульмана и Когаловского я бы не стал упрекать в незнании теории. ChA SemaphoreДейт допустил огромное количество ошибок, он умудряется противоречить себе, любимому, непростительно частоПозвольте посмотреть хотя бы на список Ваших работ ? Кроме того, приведите, если уж на то пошло, цитату из Date, где он заблуждается относительно NULL ? Он отрицает NULL ? Так, собственно, об этом и речь, хотя это и неверное понимание, о чем и говоритРанее я привел разделы, в которых Дейт допускает промахи и ошибки. Не поленитесь и внимательно прочитайте их еще раз. И на этом мне бы хотелось прекратить обсуждение «заслуг» Дейта в этом обсуждении (хотите открывайте отдельное обсуждение). ChADate и предлагает заменять незнание значения реальным значением, которое имеет конкретный смысл для определенного типа данных, что отличается от отсутствия значения, для которого тип, вообще говоря, неопределен в принципе и может предполагаться только из контекстаВот здесь надо остановиться. NULL – означает отсутствие значения. Теперь Вы вместе с Дейтом предлагаете заменить отсутствие значения на «присутствие» специального значения. Очевидно, что Вам придется обосновать это специальное значение для каждого случая и перед разработчиками, и перед пользователями, и перед... инструментами СУБД. То есть, Вам придется многократно повторять в проектной документации, в документации администратору БД и в метаданных, что это специальное значение на самом деле является отсутствием значения, то бишь... NULL. ChAНеизвестное значение отличается от отсутствия значения, если Вы этого не понимаете, то здесь ничем помочь не могу, значит надо больше читать и много думать.Давайте не будем строить предположения о том, кто и что понимает. Хорошо?! Так вот NULL – это отсутствие значения, а UNKNOW – это НЕИЗВЕСТНЫЙ результат операции. По крайней мере, так принято в стандарте SQL (кстати, стандарты SQL тоже не глупые люди писали, например, Джо Селко – техниеский редактор комитета хорошо известен, как крупнейший специалист в области СУБД, а его книги и публикации пользуются огромной популярностью, рекомендую почитать его «Data and Databases», к сожалению, на русском перевода этой книги нет). ChA SemaphoreОднако такое решение усложнит структуру БД и, соответственно, повысит сложность запросов к БД.Да ради Бога, когда ситуация можно разрешить с помощью использования NULL, то почему не использовать. Надо только помнить, что это не потому, что NULL - это правильно, а потому, что ни одна СУБД не поддерживает механизма неизвестных значений.Заблуждаетесь. Все нормальные СУБД поддерживают «механизм неизвестных значений», наравне с «механизмом» отсутствия значений. Поддержка «механизма неизвестных значений» сводится к проекции трехзначной логики к двузначной. Если хотя бы у одного из операндов операции отсутствует значение, то результатом операции будет значение UNKNOW, которое и будет спроецировано на двузначную логику (в соответствии с правилами установленными стандартом SQL). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2005, 11:08 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
mirГ-н Semaphore, я не фанат Дейта, но считаю, что пытаться вытирать о него ноги не стоит.Простите, но перечитайте мои сообщения еще раз. С мойе точки зрения, Дейт хороший популист (или популяризатор), но он плохо знает теорию. Это факт и если хотите, то можно в отдельной дискуссии обсудить теоретические изыски Дейта (но я бы рекомендовал всем желающим участвовать в этом обсуждении прочитать хотя бы то, что есть на citforum в переводе Сергея Кузнецова). mirТут вы скорее свой "имидж" резко уронили до пустозвонства, ибо делать заявления типа вашего "походя" просто недопустимо. Именно вот так это несерьезно.Ха-ха-ха... Если бы здесь обсуждали пособия для начинающих, то я бы первый привел ссылку на Дейта, но спорить о теории и ссылаться при этом на Дейта, как на авторитет... извите, но это не ко мне. И последнее. Мой "имидж" в глазах поклонников "научных заслуг" Дейта, меня беспокоит не так сильно, как прошлогодний снег. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2005, 11:42 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
> Повторю, NULL в результате запроса и таблице означает одно и тоже: > ОТСУТСТВИЕ ИНФОРМАЦИИ. У-у-у... дружище, у Вас не только о базах данных неправильное представление. Читайте Шеннона до полного просветления. > "Отрицательный ответ" - это Ваша интерпретация отсутствия информации, Правильно. Т. е. тот самый частный случай контекстной интерпретации null. Разница, надеюсь, понятна? > Вы пытаетесь поставить знак равенства между отрицательным ответом и пустым > множеством, что не есть правильно. Да нет, уважаемый, Вы пытались это сделать. > С мойе точки зрения, Дейт хороший популист (или популяризатор), но он плохо > знает теорию. Плохая точка зрения. Неумная. > прочитать хотя бы то, что есть на citforum в переводе Сергея > Кузнецова). Кроме citforum могу порекомендовать забор как источник информации. Качество - сопоставимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2005, 14:15 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
NULL специально для разруливания таких ситуаций и придуман. И Left Join тоже. Так что надо использовать NULL и LEFT JOIN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2005, 14:23 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
guest_20040621 SemaphoreПовторю, NULL в результате запроса и таблице означает одно и тоже: ОТСУТСТВИЕ ИНФОРМАЦИИУ-у-у... дружище, у Вас не только о базах данных неправильное представление. Читайте Шеннона до полного просветленияСильная аргументация! Если оппонент начинает переходить к аргументам вроде: "сам дурак", то это не может не радовать guest_20040621 Semaphore"Отрицательный ответ" - это Ваша интерпретация отсутствия информацииПравильно. Т. е. тот самый частный случай контекстной интерпретации null. Разница, надеюсь, понятна?Это случай Вашей интерпретации! NULL - это только отсутствие информации без какой-либо интерпретации. guest_20040621 SemaphoreВы пытаетесь поставить знак равенства между отрицательным ответом и пустым множеством, что не есть правильноДа нет, уважаемый, Вы пытались это сделать.Ну, это откровенное передергивание. Вот цитатата из Вашего сообщения guest_20040621А null в Вашем запросе означает отсутствие у сотрудников детей определенного возраста. Т. е. несет абсолютно определенную смысловую нагрузку.Надеюсь Вас не затруднит привести цитату из моих сообщений о том, что я утверждал, что NULL равнозначен отрицательному ответу (в подверждение Ваших же слов). guest_20040621 SemaphoreС мойе точки зрения, Дейт хороший популист (или популяризатор), но он плохо знает теорию.Плохая точка зрения. Неумная.Ранее я уже сказал, что если хотите обсуждать заслуги Дейта, то открывайте новую дискуссию. guest_20040621 Semaphoreпрочитать хотя бы то, что есть на citforum в переводе Сергея Кузнецова).Кроме citforum могу порекомендовать забор как источник информации. Качество - сопоставимо.Без комментария... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2005, 14:42 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
> Сильная аргументация! Если оппонент начинает переходить к аргументам вроде: > "сам дурак", то это не может не радовать ;) Никто за рамки дискуссии не выходит. Если Вы не имеете представления о том, что пишете, моей вины в этом нет, согласитесь. Использовать термин "информация" в данном контексте просто безграмотно. > Надеюсь Вас не затруднит привести цитату из моих сообщений о том, что я > утверждал, что NULL равнозначен отрицательному ответу (в подверждение Ваших > же слов). Да нет, конечно же. На стр. 2 обсуждения найдите Ваше сообщение с утверждением о том, что null в запросе и в таблице означают одно и то же. > Без комментария... Да и какие могут быть комментарии? На sql.ru есть товариСЧи, которые при обсуждении проектирования баз данных приводят ГОСТы как пример обязательных нормативных документов. Ладно, я посмеюсь, но обсуждения читают самые разные люди, - чего ж ахинею плести? В Вашем лице нашелся товариСЧ, который привел citforum как источник информации. Опять же я посмеюсь, но вполне могут найтись люди, которые примут это за чистую монету. Ваша ссылка на citforum говорит гораздо больше о Вашем уровне профессиональной подготовки, чем Вы можете продемонстрировать здесь, в этом топике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2005, 15:01 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
guest_20040621 SemaphoreСильная аргументация! Если оппонент начинает переходить к аргументам вроде: "сам дурак", то это не может не радовать;) Никто за рамки дискуссии не выходит. Если Вы не имеете представления о том, что пишете, моей вины в этом нет, согласитесь. Использовать термин "информация" в данном контексте просто безграмотно.Поясните свою мысль. Слово "информация" достаточно многогранно, и его использование, как синонима слов "данные", "значения полей" и т.п., в контексте данного обсуждения мне кажется вполне уместным. Если я использовал это слово неудачно, так, что смысл предложения искажался, то подтвердите это цитатой, пожалуйста. Без такого подтверждения Ваше заявление о моей безграмотности голословно. guest_20040621 SemaphoreНадеюсь Вас не затруднит привести цитату из моих сообщений о том, что я утверждал, что NULL равнозначен отрицательному ответу (в подверждение Ваших же слов).Да нет, конечно же. На стр. 2 обсуждения найдите Ваше сообщение с утверждением о том, что null в запросе и в таблице означают одно и то же.Посмотрел и не нашел. Тот факт, что Вы не смогли привести цитаты, подтверждающей Ваш выпад, позволяет мне назвать Вас болтуном. guest_20040621 SemaphoreБез комментария...Да и какие могут быть комментарии? На sql.ru есть товариСЧи, которые при обсуждении проектирования баз данных приводят ГОСТы как пример обязательных нормативных документов. Ладно, я посмеюсь, но обсуждения читают самые разные люди, - чего ж ахинею плести? В Вашем лице нашелся товариСЧ, который привел citforum как источник информации. Опять же я посмеюсь, но вполне могут найтись люди, которые примут это за чистую монету. Ваша ссылка на citforum говорит гораздо больше о Вашем уровне профессиональной подготовки, чем Вы можете продемонстрировать здесь, в этом топике.Отказ в комметировании Вашего предыдущего выпада был связан с двумя причинами. Первая состоит в том, что Вы вырвали слово из контекста. Я не рекомендовал читать на citforum все подряд. Вот, что я сказал Semaphoreможно в отдельной дискуссии обсудить теоретические изыски Дейта (но я бы рекомендовал всем желающим участвовать в этом обсуждении прочитать хотя бы то, что есть на citforum в переводе Сергея Кузнецова)То есть, я говорил про работы Дейта, которые есть на citforum. Вторая причина, отказа комментировать состоит в том, что если у Вас есть сомнения в квалификации Сергея Кузнецова, как специалиста в области баз данных, или Вы считаете его переводы неточными, то... Хотя, я понимаю, что подвердить или опровергнуть эти положения Вы тоже будете не в состоянии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2005, 15:34 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
> Слово "информация" достаточно многогранно, Хм... это форум филологического факультета университета или все-таки sql.ru? > его использование, как синонима слов "данные", "значения полей" и т.п., в > контексте данного обсуждения мне кажется вполне уместным. Плохо, что сказать. Читайте Шеннона. Изучайте терминологию. > смысл предложения искажался, то подтвердите это цитатой, пожалуйста. Видите ли, в чем проблема, дружище, Шеннона Вы не читали, а citforum я не читаю, так что вряд ли у меня получится привести устраивающую Вас цитату. Google никто не отменял, - ищите, если интересно. > Тот факт, что Вы не смогли привести цитаты, подтверждающей Ваш выпад, > позволяет мне назвать Вас болтуном. Дружище, следите за языком. [1225576]: ...И в моем запросе, и в таблице NULL означает только одно - отсутствие данных и никакой другой интерпретации нет!... > Вторая причина, отказа комментировать состоит в том, что если у Вас есть > сомнения в квалификации Сергея Кузнецова, как специалиста в области баз > данных, или Вы считаете его переводы неточными, то... Я не знаком с Сергеем Кузнецовым и не могу ничего сказать о его квалификации или о качестве его переводов. > Хотя, я понимаю, что подвердить или опровергнуть эти положения Вы тоже > будете не в состоянии. А чего тут опровергать? С работами Дейта я, слава Богу, знаком и без переводов Сергея Кузнецова. На citforum не был лет пять уже как, наверное. Какие опровержения чего нужны? P.S. Нормальную тему Вы превратили в флейм. Стыдно, дружище. Если нечего сказать по существу, - лучше жевать, чем говорить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2005, 16:31 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
guest_20040621 SemaphoreТот факт, что Вы не смогли привести цитаты, подтверждающей Ваш выпад, позволяет мне назвать Вас болтуном.Дружище, следите за языком. [1225576]: ...И в моем запросе, и в таблице NULL означает только одно - отсутствие данных и никакой другой интерпретации нет!...Ха-ха-ха... Скажите, как приведенная Вами цитата связана с моим вопросом? Повторю свой вопрос: SemaphoreНадеюсь Вас не затруднит привести цитату из моих сообщений о том, что я утверждал, что NULL равнозначен отрицательному ответу (в подверждение Ваших же слов).Вы либо плохо читаете, либо просто несете ерунду. guest_20040621 SemaphoreВторая причина, отказа комментировать состоит в том, что если у Вас есть сомнения в квалификации Сергея Кузнецова, как специалиста в области баз данных, или Вы считаете его переводы неточными, то...Я не знаком с Сергеем Кузнецовым и не могу ничего сказать о его квалификации или о качестве его переводов.Вы думаете я сомневался в том, что Вы не знаете ведущих в нашей стране специалистов в области баз данных? Нет, ничуть не сомневался guest_20040621P.S. Нормальную тему Вы превратили в флейм. Стыдно, дружище. Если нечего сказать по существу, - лучше жевать, чем говорить.Не переваливайте с больной головы на здоровую. Это Вы раздули flame из-за того, что Вам не понравилось мое высказывание о Дейте. Но Дейту была посвящена одна фраза из моего сообщения, по сути же сообщения Вы ничего не смогли сказать, едва не заблудившись между понятиями NULL и UNKNOW. Так что flame – это Ваша заслуга... "дружище" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2005, 17:59 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
SemphoreВсе нормальные СУБД поддерживают «механизм неизвестных значений», наравне с «механизмом» отсутствия значений. Поддержка «механизма неизвестных значений» сводится к проекции трехзначной логики к двузначной. Если хотя бы у одного из операндов операции отсутствует значение, то результатом операции будет значение UNKNOW, которое и будет спроецировано на двузначную логику (в соответствии с правилами установленными стандартом SQL).Корректная «проекция трехзначной логики к двузначной» в принципе невозможна. Теоретические аспекты этой невозможности (т.наз. парадоксы 3VL) и описал Дейт. Могу добавить маленький пример: в рамках нормальной 2VL поддерживается оператор IF-ELSE, который имеет две ветки. Одна из этих веток всегда выполняется. В случае же 3VL двух веток мало, надо три: по TRUE, по FALSE и по UNKNOWN. Однако такого оператора нет ни в одной СУБД. Как и операторов цикла с тремя возможностями: прервать цикл, продолжить цикл и… (И что?). Так что полноценная поддержка 3VL в современных СУБД весьма и весьма под вопросом. Только молю, не надо мне про возможность проверки IS NULL и т.д., все это понятно и реализуемо. Речь о теоретическом аспекте. А если все же о практическом, то можно сказать вот что: применение классических логических конструкций 2VL в условиях 3VL есть один из дополнительных источников ошибок (например, классический программист всегда предполагает автоматическое выполнению ветки ELSE при невыполнении ветки IF). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2005, 07:00 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
mir SemphoreВсе нормальные СУБД поддерживают «механизм неизвестных значений», наравне с «механизмом» отсутствия значений. Поддержка «механизма неизвестных значений» сводится к проекции трехзначной логики к двузначной. Если хотя бы у одного из операндов операции отсутствует значение, то результатом операции будет значение UNKNOWN, которое и будет спроецировано на двузначную логику (в соответствии с правилами установленными стандартом SQL).Корректная «проекция трехзначной логики к двузначной» в принципе невозможна.Другими словами, тот метод проекции, который есть в стандарте, начиная с SQL 89, является некорректным? Вероятно Вы хотели сказать, что трехзначная логика не тождественна двузначной. А «корректность» приведения определяется принятыми соглашениями (в данном случае, стандартами SQL). mirТеоретические аспекты этой невозможности (т.наз. парадоксы 3VL) и описал Дейт.Насколько я знаю, это было сделано до Дейта. mirМогу добавить маленький пример: в рамках нормальной 2VL поддерживается оператор IF-ELSE, который имеет две ветки. Одна из этих веток всегда выполняется. В случае же 3VL двух веток мало, надо три: по TRUE, по FALSE и по UNKNOWN. Однако такого оператора нет ни в одной СУБД.Оператора IF нет в стандарте SQL. mirКак и операторов цикла с тремя возможностями: прервать цикл, продолжить цикл и… (И что?).Любой оператор цикла представим конструкцией IF и GOTO. Если Вы допускаете существование IF с тремя «ветками», то дайте возможность программистам самостоятельно решать, что делать в «ветке» UNKNOWN (перейти к новой итерации, прервать цикл, вызвать исключение и пр.). mirТак что полноценная поддержка 3VL в современных СУБД весьма и весьма под вопросом.У меня иное мнение. Если комитет по стандартизации SQL (куда входят специалисты всех ведущих фирм-разработчиков СУБД) примут решение о том, что необходимо ввести в обиход UNKNOWN, то поддержка трехзначной логики будет реализована «полноценно» (правильнее было бы сказать - явно). mirТолько молю, не надо мне про возможность проверки IS NULL и т.д., все это понятно и реализуемо. Речь о теоретическом аспекте.Теоретически нет никаких проблем в том, чтобы сделать явной трехзначную логику. Вы, наверное, знаете, что SQL нельзя назвать «полноценным» реляционным языком. Теоретически нет никаких проблем в том, чтобы создать «нормальный» реляционный язык (язык, который явно поддерживает все операции над множествами). Мало того, таких языков УЖЕ было создано несколько десятков, но пользуются SQL. Аналогично и в случае с IS NULL. Можно явно ввести третье логическое значение в SQL, но... приживется ли? mirА если все же о практическом, то можно сказать вот что: применение классических логических конструкций 2VL в условиях 3VL есть один из дополнительных источников ошибок (например, классический программист всегда предполагает автоматическое выполнению ветки ELSE при невыполнении ветки IF).Ошибки – всегда есть следствие невнимательности или незнания правил. Если программист невнимателен или не знает правил приведения трехзначной логики к двузначной, то... ему ничем не поможешь. Это первое. Второе. Явное введение трехзначной логики будет провоцировать ошибки по... тем же самым причинам (невнимательность и незнание). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2005, 08:56 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
semaphoreДругими словами, тот метод проекции, который есть в стандарте, начиная с SQL 89, является некорректным? Разумеется. Чистой воды некорректным. Например, согласно общеизвестным правилам 3VL, любое арифметическое или логическое выражение с одним из аргументов Unk дает Unk. То есть a+b = NULL, если a=NULL или b=NULL. А теперь посмотрите, как реализованы агрегирующие функции в SQL. Совершенно не так. Если в суммируемом столбце есть NULL-значения, они просто игнорируются. А ведь сумма SUM по столбцу должна однозначно быть NULL, есть есть хоть один NULL. Что же тут корректного? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2005, 13:55 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
mir semaphoreДругими словами, тот метод проекции, который есть в стандарте, начиная с SQL 89, является некорректным? Разумеется. Чистой воды некорректным. Например, согласно общеизвестным правилам 3VL, любое арифметическое или логическое выражение с одним из аргументов Unk дает Unk. То есть a+b = NULL, если a=NULL или b=NULL. А теперь посмотрите, как реализованы агрегирующие функции в SQL. Совершенно не так. Если в суммируемом столбце есть NULL-значения, они просто игнорируются. А ведь сумма SUM по столбцу должна однозначно быть NULL, есть есть хоть один NULL. Что же тут корректного?Понятие "корректности" определяется стандартом. Давайте представим к чему приведет работа агрегатных функций по Вашим правилам. Предположим, что у нас есть таблица: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Так в чем же некорректность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2005, 14:47 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
авторПонятие "корректности" определяется стандартом Вот он корень наших разногласий. Понятие "корректности" IMHO определяется в первую очередь математикой, во вторую здравым смыслом. Такие вот "стандартизаторы" в одном из штатов Америки законодательно определили значение чила "пи" равное 4 (исторический факт). Но оно корректным из-за этого не стало. авторпредставим к чему приведет работа агрегатных функций по Вашим правиламСекундочку, я никаких правил не предлагал. Это не "мои" правила. Это правила трехзначной логики, описанные повсеместно. Не надо вот этого, не надо. авторПоэтому комитетом по стандартизации SQL принято корректное решение о правилах вычисления агрегатных функций в операторах. Итак, оно "корректное", ибо принято комитетом. Читай выше про число "пи". авторИ это решение вполне корректно и с точки зрения теории, Абсолютно некорректно. Если я буду делать a+b по правилам 3VL (не моим!), получу NULL при a = NULL или b= NULL. Если же a и b есть значения атрибута в двух строках, то функция суммирования не вернет NULL. То есть она суммирует не по правилам 2VL и не по правилам 3VL, а по правилам "комитета". Браво! Число "пи" равно-таки 4! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2005, 16:19 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Надо все же напомнить мою точку зрения. Я считаю, что без NULL совсем обойтись нельзя, что комитет сработал правильно, операции в условиях наличия NULL-значений определил нужным образом. Если бы агрегирующие функции работали строго по правилам 3VL, они скорее всего черта лысого были бы кому нужны. Надо понять, что SQL определен так, чтобы в большинстве случаев работать удобным для использования образом. Однако надо понять и другое. «Удобным для использования образом» не означает «в соответствии с теорией, с трехзначной логикой». Надо избавиться от представления о том, что трехзначная логика может быть корректно отображена на двухзначную. Корректно математически, а не «по-комитетовски». Например, рассмотрим операцию удаления строк DELETE FROM TABLE WHERE CONDITION . Операция для каждой строки вычисляет CONDITION и либо удаляет строку, либо нет. Однако что делать, если CONDITION=NULL ? Если удалить строку, то мы признаем, что NULL=TRUE , если оставить, то мы признаем, что NULL=FALSE . Последний вариант и работает, но он не соответствует 3VL, ибо согласно 3VL NULL<>FALSE и NULL<> TRUE . Корректным с точки зрения 3VL мог бы быть единственный вариант — отвергнуть всю операцию DELETE FROM , поскольку она не может быть обработана, и требовать доопределения условия CONDITION на случай наличия NULL (что-нибудь типа a<b AND a IS NOT NULL AND b IS NOT NULL ). Еще пример. Как известно, про значение NULL нельзя сказать, что оно равно другому значению NULL. Нельзя сказать и что значение NULL не равно другому значению NULL. (Эй, мистер, я ничего не придумываю, никаких своих правил, нет?) Поэтому примечательно рассмотреть реализацию SELECT DISTINCT . Эта операция, как известно, должна исключать из выборки дубликаты строк. Если найдена группа строк вида Код: plaintext 1. 2. Код: plaintext Вывод: чистое применение обычной, двухзначной логики решает многие проблемы, но многие и создает. Однако внедрение NULL и 3VL тоже хотя и решает многие проблемы, но многие и создает. Ошибка думать, что современные СУБД работают согласно 3VL. Они работают не по 2VL, и не по 3VL, а «по-комитетовски» . То есть математика и теория здесь вообще в стороне. Это зло, но зло неизбежное. Поэтому многие авторы, в т.ч. Дейт и говорят, что желательно избегать NULL, если возможно. При этом все мы понимает, что это возможно не всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2005, 06:37 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
mir авторПонятие "корректности" определяется стандартом Вот он корень наших разногласий. Понятие "корректности" IMHO определяется в первую очередь математикой, во вторую здравым смыслом. Такие вот "стандартизаторы" в одном из штатов Америки законодательно определили значение чила "пи" равное 4 (исторический факт). Но оно корректным из-за этого не сталоВыдергивание фразы из контекста – не есть пример доблести, IMHO. В моем сообщении говорилось о корректности приведения результатов полученных при операциях выполненным в трехзначной логике к результатам двузначной логики. Заметьте, речь не идет о корректности логик, а о корректности правил приведения! В качестве аналогии: есть пространственная (трехмерная) фигура, а есть (двумерная) плоскость. И то и другое не подвергается сомнению. Но существуют различные правила приведения (проекции фигуры на плоскость). И то, по каким правилам выполняется проекция, определяется стандартом. Мне кажется, что Вы ищите проблему там, где ее... никогда не было. mir авторпредставим к чему приведет работа агрегатных функций по Вашим правиламСекундочку, я никаких правил не предлагал. Это не "мои" правила. Это правила трехзначной логики, описанные повсеместно. Не надо вот этого, не надо.Простите, я действительно должен был сказать: «По предлагаемым Вами правилам». Еще раз приношу свои извинения. mir авторПоэтому комитетом по стандартизации SQL принято корректное решение о правилах вычисления агрегатных функций в операторахИтак, оно "корректное", ибо принято комитетом. Читай выше про число "пи"Прочитал, но не вижу аналогии. Повторю еще раз, что комитет не принимал стандарта о трехзначной или двузначной логике, он принял решение о том, как приводить одно к другому, поскольку не существует (и не может существовать) однозначного соответствия между этими двумя логиками. mir авторИ это решение вполне корректно и с точки зрения теории Абсолютно некорректно. Если я буду делать a+b по правилам 3VL (не моим!), получу NULL при a = NULL или b= NULLОшибаетесь, результатом операции будет не NULL, а UNKNOWN. И прошу Вас еще раз и более внимательно прочитать то, против чего Вы возражаете. mirЕсли же a и b есть значения атрибута в двух строках, то функция суммирования не вернет NULL. То есть она суммирует не по правилам 2VL и не по правилам 3VL, а по правилам "комитета". Браво! Число "пи" равно-таки 4!Не делайте поспешных выводов. «Суммирования» с NULL в агрегатных функциях нет. Об этом я уже говорил. Прочитайте предыдущее сообщение, разберите (внимательно!) приведенный пример (если лень читать стандарт). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2005, 09:42 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
mirНапример, рассмотрим операцию удаления строк DELETE FROM TABLE WHERE CONDITION . Операция для каждой строки вычисляет CONDITION и либо удаляет строку, либо нет. Однако что делать, если CONDITION=NULL ? Если удалить строку, то мы признаем, что NULL=TRUE , если оставить, то мы признаем, что NULL=FALSE . Последний вариант и работаетСие - есть заблуждение!!! mirно он не соответствует 3VL, ибо согласно 3VL NULL<>FALSE и NULL<> TRUE . Корректным с точки зрения 3VL мог бы быть единственный вариант — отвергнуть всю операцию DELETE FROM , поскольку она не может быть обработанаМне кажется, что Вы напрасно драматизируете ситуацию. Сравнения вида NULL=TRUE, NULL=FALSE, NULL<>TRUE, NULL<>FALSE вернут значения UNKNOWN в полном соответствии с трехзначной логикой. UNKNOWN будет преобразована к FALSE (по правилам принятым стандартом SQL). Предположим(!), что у меня в кармане лежит купюра. Вы знаете ее достоинство? Такой информации у Вас, скорее всего нет. Теперь я спрошу Вас: "Это купюра достоинством в сто рублей?".Честный человек должен сказать: "Я не знаю". Предположим, что к Вам поступило распоряжение изъять все купюры достоинством ниже 50 руб. Можете ли Вы потребовать от меня, что бы я отдал Вам купюру, если Вы попрежнему не знаете ее достоинства и даже не уверены в том, что она у меня вообще есть? Стандарт говорит, что Вы не можете предъявить мне подобных требований. mirи требовать доопределения условия CONDITION на случай наличия NULL (что-нибудь типа a<b AND a IS NOT NULL AND b IS NOT NULL )Совершенно верно. mir(Эй, мистер, я ничего не придумываю, никаких своих правил, нет?)Замечательно. В таком тоне Вы можете общаться со своими друзьями. Я же имею честь откланяться. Прощайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2005, 10:21 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
"Абалдеть, я умираю" (с) Не помню имени героя Использование Null - это правильно !!! Только Null - скорее не отсутствие данных, а их неопределённость. В жизни троичная логика, поэтому должно быть : Да, Нет, Не_Да_И_Не_Нет Это везде, при взвешивании на аптечных весах, какие варианты? Левая ниже 1- Да , 2 - нет , а где Равенство , нужно тоже три состояния. Резюме для исходного примера (да, это тот про справочники, с псевдоNull который ID=0, Descr=" - - - "): Null - Это неопределённость в строке с данными. " - - - " - Тоже неопределённость, но не для самих строк, а для пользователей, которые смотрят на эти строки. IMHO, Mon$te® ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2005, 13:21 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
4d_monsterСтоит ли В справочнике иметь "пустой" элемент, для того чтобы в полях , использующих этот справочник поставить признак "Обязательное". Во многих случаях это уменьшает необходимость в дополнительных проверках в коде приложения. Если в базе в поле типа int можно поместить null, то во многих языках разработки клиентских приложения - нет. Из-за этого: 1. При чтении поля нужно делать проверку, и если null - то помещать в переменную "специальное" значение 2. При сохранении данных делать проверку на "специальное" значение, и если так, то записывать в БД null 3. Если данные помещаются в БД не напрямую, а присваиваются полям бизнес-объекта появляются дополнительные проверки. Используя "специальное" значение мы упрощаем процедуру сохранения и извлечения информации: 1. Выбираем все города, в том числе и специальный элемент. Создаем объекты (если требуется). При этом значения полей строки присваиваются полям класса без каких бы то ни было проверок. 2. Список городов заполняется полученной коллекцией. Нет необходимости в добавлении "специальных" элементов вручную, так как он хранится в БД, а название города содержит текст для отображения пользователю. 3. Пользователь выбирает любой элемент списка. 4. Значение выбранного элемента списка без проверок заносится в БД. В языках программирования используется паттерн Special Case, описывающий подобный подход и его преимущества. А недостатки уже были названы... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 12:19 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
А какое специальное значение должно быть в поле Цена, если в базе стоит Null ? IMHO, Mon$te® ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 14:30 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
-NAN +NAN -INF +INF IMHO, Mon$te® ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 14:31 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
авторА какое специальное значение должно быть в поле Цена, если в базе стоит Null ? Мне кажется, цена - это атрибут какой-то другой сущности и существует она только как атрибут. Она не является первычным ключом и нет необходимости ссылаться на цену из других таблиц. В виде списка допустимых значений, из которых пользователь должен что-то выбрать, ее показывать не требуется. С использованием null здесь я не спорю :) Так же как и не призываю отказаться от него вообще. Если в языке программирования есть возможность вместо null записать в поле класса что-то типа DBNull.Value, это тоже будет Special Case. Но проверка все равно останется, хотя и будет проводиться, например, средствами доступа к БД самого языка программирования. Я рассматривал случай когда в языке нет возможности записать в числовой тип значение null. Трехзначная логика - тоже редкость в программировании. Хорошо если есть тип bool со значениями true и false, а то и этого может не быть... Выбор способа представления данных зависит от задачи и применяемых инструментов. Сомневаюсь, что слепое следование одному варианту без анализа ситуации будет всегда уместно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 11:52 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
Пример действительно не к задаче, просто раз уж : авторЕсли в базе в поле типа int можно поместить null, то во многих языках разработки клиентских приложения - нет то такая постановка проблеммs да и решение касается всех полей. В остальном вы правы, это легче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 20:21 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
hellOK, есть таблица допустим значений датчиков температуры. Поля: id - Идентификатор записи, может быть например timestamp t1 - температура 1 датчика t2 - температура 2 датчика t3 - температура 3 датчика t4 - температура 4 датчика t5 - температура 5 датчика Данные собираются различными датчиками. Если не испльзовать NULL, как обозначить факт отсутствия данных? Ввести еще 5 полей? Как потом считать средние значения, дисперсию итп(0 - не катит, испортит статистику, -1, 9999, итп тоже) "Прежде чем убить человека, узнай, нет ли у него влиятельных родственников" (с) Библия Хороший пример чтобы продемонстрировать вред данного подхода, особенно если 1...5 что-то совершенно однотипное. Следует сделать еще одну таблицу "измеренные данные", и nullов не будет. И пустот в таблице соответственно (побочный результат). Как Вы хотите считать дисперсию, если одно из значений "отстутствует"? Если Вам их нужно пять, и не меньше, то это легко проверить и не считать упомянутую дисперсию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 15:36 |
|
||
|
Обязательность полей
|
|||
|---|---|---|---|
|
#18+
4d_monster В жизни троичная логика, поэтому должно быть : Да, Нет, Не_Да_И_Не_Нет Это везде, при взвешивании на аптечных весах, какие варианты? Левая ниже 1- Да , 2 - нет , а где Равенство , нужно тоже три состояния. В жизни вероятностная логика, тогда уж. Аптечные весы вообще прибор аналоговый, Вы пытаетесь его показания отобразить на дискретное множество значений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2005, 16:30 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1546103]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
37ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
119ms |
get tp. blocked users: |
1ms |
| others: | 267ms |
| total: | 464ms |

| 0 / 0 |
