powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Обязательность полей
25 сообщений из 77, страница 1 из 4
Обязательность полей
    #32851415
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стоит ли В справочнике иметь "пустой" элемент, для того чтобы в полях , использующих этот справочник поставить признак "Обязательное".

Т.е.
Пусть есть таблица "Клиенты" и таблица "Города"
В таблице "Клиенты" поле "ИзГорода" - ВК на "Города"
Бывает что не известно из какого города клиент, соответсвенно "ИзГорода"=NULL,
тогда в запросе придётся использовать LEFT JOIN, а если сделать "ИзГорода" обязательным и в "Города" добавить "---", тогда INNER JOIN.

Вопросы : Кто как ? Почему?

IMHO, Mon$te®
...
Рейтинг: 0 / 0
Обязательность полей
    #32851442
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну не зря же существует null. Он строго означает "нет значения", а все другое - зависит от контекста. Т.е. в общем случае придется для каждой сущности иметь свое значение "Null"
...
Рейтинг: 0 / 0
Обязательность полей
    #32851490
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monsterВопросы : Кто как ? Почему?
Иногда отсутствие NULL повышает производительность запросов (типа при where field_name is null индексы не работают). Но все это надо взвешивать в каждом конкретном случае.
...
Рейтинг: 0 / 0
Обязательность полей
    #32851495
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасиббо за ответы.

Пример утрирован.
По логике задачи мне казалось что надо использовать и null и " - - - ". Но было "пожелание единообразия ... и посмотреть что без null лучше...".

Как только стал вводить тестовые строки (прям в таблицы), понял: надо и то и другое.

IMHO, Mon$te®
...
Рейтинг: 0 / 0
Обязательность полей
    #32851588
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
некоторые утверждают что присутствие null свидетельствует об ошибке проектирования.
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Обязательность полей
    #32851661
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> По логике задачи мне казалось что надо использовать и null и " - - - ".

По логике задачи нет и не может быть null значений и тем более непонятных значений "---".

Описанные связи огранизуются только и исключительно посредством третьей таблицы.
...
Рейтинг: 0 / 0
Обязательность полей
    #32851695
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Абсолютно правильная система (идеальная, как идеальный газ):
1. не должна иметь null
2. для ввода первичных данных должен использоваться только insert (никаких update и delete не должно быть вообще в системе)
3. для отчетов и вывода данных использовать только select

В принципе это реализуемо, но на практике не всегда целесообразно
...
Рейтинг: 0 / 0
Обязательность полей
    #32851764
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Роман Дынник
2 Old Nick

Что-то я не въехал. Это новогодний прикол?
...
Рейтинг: 0 / 0
Обязательность полей
    #32851812
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поясню для непонимающих приколов :-)

1.

Можно реализовать города в виде папок, тогда клиентов можно хранить кроме папки Клиенты еще и в конкретных городах, как в папках. При этом не значит что клиентов будет 2, просто ссылка на клиента будет в двух папках. В таком случае если какой-то клиент находится только в папке Клиенты, это значит что город для него еще не определен. В дальней его можно будет поместить в конкретную папку Город. Почитайте Анатолия Тенцера, у него это хорошо описано. И у меня сделано так же.

2.

Часто для изменения данных используют update записи, но если мы хотим хранить всю историю изменений, то можно просто добавлять еще одну запись с указанием даты изменения. В таком случае ни одна редакция объекта не пропадет. Только это нужно не всегда и не везде. Некоторые объекты не требуют истории хранения, а в некоторых случаях нет смысла добавлять запись, если мы просто ошиблись в наименовании и хотим поправить.

Тоже не менее часто необходимо удалять объекты не физически, а логически, чтобы иметь возможность восстановления записи. Для этого достаточно создать создать таблицу Deleted и помещать туда указатели на удаленные объекты.

3.

При правильно построенной архитектуре сложные выборки будут не нужны, только группировки с вычислениями.
...
Рейтинг: 0 / 0
Обязательность полей
    #32851849
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Понял очень смутно, видимо привык объясняться в терминах реляционной модели, т.е. в таблицах. Однако насчет null - абсолютно несогласен, это в порядке вещей и очень даже логично

2. Конечно можно и так, но как раз по моему опыту, история изменений часто храниться только определенный период (на случай разборок или отката неправильных изменений). В этом случае в основной таблице храниться только текущее значение, а в исторической - предыдущая, причем историческая периодически очищается от старых значений. Если мы будем в основной таблице только вставлять записи, то она будет шибко расти. Так что все зависит от задачи.

3. Против SELECT для запросов я и не возражал, только непонятно - сложная выбока и SELECT - это не одно и то же?
...
Рейтинг: 0 / 0
Обязательность полей
    #32851852
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ведь написал, что это в идеале :-)

На практике полностью придерживаться этих правил далеко не всегда целесообразно

--------------------
Не учи отца и баста!
...
Рейтинг: 0 / 0
Обязательность полей
    #32851870
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55

А знаешь откуда взялся на самом деле null? Его ведь не специально придумали.

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

Table_ID
Column_ID
Row_ID
Value

так вот, если у нас в какой-то ячейке пользовательской таблицы значение null, то это значит, что для этой ячейки нет записи в вышеприведенной таблице и при формировании пользовательской таблицы в этом месте просто получается дыра. Это можно хорошо проследить если поработать с кубами (OLAP). Именно поэтому

--------------------
Не учи отца и баста!
...
Рейтинг: 0 / 0
Обязательность полей
    #32851884
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С OLAP не работал, спорить не буду. Однако простой пример (из любимой Oracle обучалки) - для простоты.

Есть отделы department
dep_id
dep_name

Есть служащие employees
emp_id
emp_name
dep_id

где dep_id - внешний ключ на department

Завожу я служащего, который еще не приписан к отделу. Что в таком случае должно содержать dep_id ?
И ведь подобных случаев масса.
...
Рейтинг: 0 / 0
Обязательность полей
    #32851888
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ведь служащий может быть не к одному отделу приписан. Допустим я в отделе ИТ и при этом мне не хватает денег и я решил подрабатывать техничкой по вечерам, а потом еще и сторожить по ночам :-)
...
Рейтинг: 0 / 0
Обязательность полей
    #32851915
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Однако простой пример (из любимой Oracle обучалки)

Для "обучалки" такой пример подойдет. Для проектирования - нет. Учите матчасть.
...
Рейтинг: 0 / 0
Обязательность полей
    #32851924
Фотография ЦК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 tru55

> 2 Роман Дынник
> 2 Old Nick
>
> Что-то я не въехал. Это новогодний прикол?

Ага. Приколисты. Как они, интересно, собираются работать без null с таким случаем:

"на сегодня не введен курс рубля к баксу"

---
ping eblan.us
...
Рейтинг: 0 / 0
Обязательность полей
    #32851943
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:-)))))))))))))))))))))))))))))))
...
Рейтинг: 0 / 0
Обязательность полей
    #32851950
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Old NickА ведь служащий может быть не к одному отделу приписан. Допустим я в отделе ИТ и при этом мне не хватает денег и я решил подрабатывать техничкой по вечерам, а потом еще и сторожить по ночам :-)

Понятно, что в этом случае связь будет реализована через третью таблицу. Я говорил про случай, когда связь четко один-к-одному. Или вы полагаете, что в реальных системах такого не бывает
...
Рейтинг: 0 / 0
Обязательность полей
    #32851956
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> Однако простой пример (из любимой Oracle обучалки)

Для "обучалки" такой пример подойдет. Для проектирования - нет. Учите матчасть.

А чем такой пример нереален? И почему вы думаете, что я новичек в БД?
...
Рейтинг: 0 / 0
Обязательность полей
    #32851964
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бывает конечно, при упрощении модели.

Если допустим нам в системе понадобился набор из 10 сущностей, которые наследуются от одной базовой и отличаются от нее одним единственным полем, то вместо огорода из 11 таблиц (одна для базовой сущности, и 10 для наследников, в каждой из которых по одному дополнительному полю) можно хранить все эти сущности в одной таблице и для записей относящихся к другим типам проставлять в поле NULL.

--------------------
Не учи отца и баста!
...
Рейтинг: 0 / 0
Обязательность полей
    #32851965
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на сегодня не введен курс рубля к баксу
хранение null и проверка на null это разные вещи.
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Обязательность полей
    #32851991
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55, я не говорю что примеры приведенные Вами нельзя реализовывать. Вполне возможно и допустимо. Просто меня что-то понесло сегодня :-)

--------------------
Не учи отца и баста!
...
Рейтинг: 0 / 0
Обязательность полей
    #32852004
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Такое бывает довольно часто. Я поступаю так. Допустим имеется таблица Люди и справочник Города

Люди (Имя char not Null, КодГорода int not Null default 0)

Города (КодГорода Int identity (0,1), Имя Null)

В Городах имею запись (0,Null)

Для людей, у которых неизвестен Город - КодГорода=0
...
Рейтинг: 0 / 0
Обязательность полей
    #32852016
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если нужно вывести отчет по людям в городе и при этом пользователь должен подставить город выбрав его из справочника?
Если не выбрать никакой город, то как вести себя? Вывести все записи или те что с 0?
Лучше иметь в справочнике неопределенный город и подставлять его по-умолчанию. Красивее получается.

--------------------
Не учи отца и баста!
...
Рейтинг: 0 / 0
Обязательность полей
    #32852029
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> А чем такой пример нереален?

Почему нереален? Если Вы говорите, что он есть в учебной бд, то он наверняка там есть. Его реальность сомнений не вызывает.

> И почему вы думаете, что я новичек в БД?

Я ничего по этому поводу не думаю. Я просто ответил на Ваш вопрос. "Учите матчасть" относится к тому, что вопрос использования null значений освещается практически в любой литературе по реляционным базам данных, потрудитесь прочесть хоть что-нибудь.
...
Рейтинг: 0 / 0
25 сообщений из 77, страница 1 из 4
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Обязательность полей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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