Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

подходы в разработке БД


Страницы:   1 2 3

kserg@ukr.net ©   (2002-10-24 18:02:00) 

Привет всем.
Впервые сталкиваюсь с такой развитой задачей, вот и прошу
подскажите подходы в решении след.задачи разработки БД

У меня есть задача автоматизировать обработку инфо в фирме.
Планируется куча таблиц (структура примерная, причем некоторые таблицы «распадаются» на несколько):

- СПРАВОЧНИК ИЗДЕЛИЙ (НОМЕНКЛАТУРА: тип изделия(материал,ПКИ), назва,обозначение,поставщик, условия поставки, цена, тех.хар-ки и тд)

- ПРОЕКТЫ(перечень позиций входящие в состав проекта: название,обозначение, поставщик, кол, цена и тд),

- ПОСТАВЩИКИ (назва, адреса,контакты и тд)

-ЗАЯВКИ(дата заказа, поставщик, название, обозначение, кол, цена, условия поставки/оплаты и тд.)

- СКЛАД(приход/расход): склад, получил от фирмы, название,обознач, кол, выдано на проект, кол и тд)

Даже при первом осмотре видны связи-ссылки.
Это вполне нормальный подход: хранить в таблицах с данными IDссылки на справочники.

Проблема возникает в связи со след.: если использовать в кач-ве ID-коды (т.е. достигается строгое соот-е между master-detail таблицами) то возникает проблемы с вводом данных.
В таких случаях ввод в связанные поля я обычно реализовал как выбор из списков.
Но в списке может содержаться сотни названий…
(попробуй-ка глазками выхватить нужную строку)

Если же в таблицах использовать Look-Up поля, позволяющие либо выбрать из списка-справочника либо ввести ручками, то теряется достоверность вводимых юзером данных :(

Какие кто предлажит решения?

Заранее благодарен.


passm   (2002-10-25 15:26:00) [21]

Delirium © (25.10.02 15:10)> 5-й пункт для клиент/сервер не обязателен. Фильтры спасут от перегрузок :)


MsGuns   (2002-10-25 15:17:00) [22]

>Delirium © (25.10.02 15:10)

Я бы еще добавил
6)Права - определяют диапазон функций (прав) специализированных клиентов (т.е. директору-директорово, бухгалтеру-бухгалтерово) и прав к доступу к данным


Delirium   (2002-10-25 15:10:00) [23]

> Johnmen ©

"А вот в реальности иногда приходится и понижать" - Согласен, иногда приходится (к сожалению), однако это уже больше творчество чем наука - предугадывать возможные расширения и строить проект в соответствии с ними. Возвращаясь к автору ветки, дам ещё несколько советов, возможно пересекающихся с пердыдущими ораторами. Необходимо чётко разделять по структуре и по нотации следующие объекты БД:
1) Справочники (идентификатор, значение)
2) Связи (cross table) (идентификатор_справочника_1, идентификатор_справочника_2) - лучше создавать отдельный кросс для каждой пары спавочников
3) Документы (master->detail) - лучше не создавать более чем двух-уровневые документы
4) Агрегаты (вычисления по документам) - следует увязать на триггерах, дабы ускорить рассчёты на больших таблицах
5) Истроии (точные копии вышеозначенных таблиц с дополнительным ключом)
Думается, если придерживатья такой методики, получить высоко-нормальную базу не проблема, даже на очень сложных проектах.


MsGuns   (2002-10-25 14:58:00) [24]

>Johnmen © (25.10.02 14:09)
>MsGuns © (24.10.02 20:02)

>По поводу использ.формы редактирования вместо грида - согласен,
>но аргументы, тобой приводимые, весьма слабы, а некоторые просто некорректны...

Ну, с аргументами у меня вообще сплошные траблы (ЁМХО)
Особенно если их не утружаются не то что аргументированно
опровергнуть, но даже прочитать и постараться понять.


Alex Chu   (2002-10-25 14:45:00) [25]

Теперь можно всем пожать лапки!

Без полноценного ТЗ даже начинать работу НЕЛЬЗЯ!
И поверте, MsGuns ©, это далеко не 50%...это БОЛЬШЕ!

Кодеров сейчас тучи, а программеров и Постановщиков мало!


MsGuns   (2002-10-25 14:41:00) [26]

Так в чем проблема ? Берите постановку сами ! Нормальные огурцы так и делают. А от заказчика (клиента) нужны только ИСХОДНЫЕ ТРЕБОВАНИЯ. Нормально сработанное ТЗ - как min 50% всего объема работы.


Johnmen   (2002-10-25 14:35:00) [27]

>Alex Chu (25.10.02 14:21)

Абсолютно точное замечание !!!

>...задачи ставят люди, мало разбирающиеся ...

Зачастую, просто НЕразбирающиеся !!! И не могущие в принципе формализовать задачу...


Ops   (2002-10-25 14:29:00) [28]

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


Alex Chu   (2002-10-25 14:21:00) [29]

Если говорить о принципах проектирвоания БД, то говорить больше приходится о качестве ТЗ и Грамотности (образования и опыта) Постановщика задачи.

Но у нас в стране, зачастую, задачи ставят люди, мало разбирающиеся в аспектах Программирования и Структур БД в частности.

Следовательно - первым шагом в момент разработки ТЗ должен быть поиск человека, который знаком с особенностям работы программистов и с Сутью проблемы в организации, которую хотят решить (упростить), говоря об автоматизации процессов.

Какая, б.., нормализация в этот период?!!


MsGuns   (2002-10-25 14:15:00) [30]

>Delirium © (25.10.02 13:55)

Боюсь опять навлечь на себя гнев монстров БД, но заявлю категорично.
Задача построения графов (а состав изделий - это как раз из этой серии) на БД с НЕИЕРАРХИЧЕСКОЙ структурой ФИЗИЧЕСКОГО хранения информации - является нормализуемой лишь частично ! Можно нормализовать узлы (т.е.детали, сборки и т.д.), но никак не СВЯЗИ МЕЖДУ НИМИ. Хотя бы потому, что они носят весьма временный характер из-за большого кол-ва конструкторско-технологических изменений. Также ИМХО


Johnmen   (2002-10-25 14:09:00) [31]

>MsGuns © (24.10.02 20:02)

По поводу использ.формы редактирования вместо грида - согласен,
но аргументы, тобой приводимые, весьма слабы, а некоторые просто некорректны...

>Delirium © (25.10.02 13:55)
>В общем, я считаю, что степень нормализации должна
>закладываться при логическом проектировании БД и в дальнейшем
>не понижаться, ...

Твоими устами, да мед пить !
А вот в реальности иногда приходится и понижать (по мере возрастания аппетитов заказчика)....


Delirium   (2002-10-25 13:55:00) [32]

> Sergey13 ©
Я не возвожу нормализацию в неукоснительную и, по большому счёту, абстрактную догму. Разумеется идеально нормализованых БД в природе не существует, а если бы и были - работа с ними превратилась бы в большую проблему, чем обеспечение целостности, формализации, экономии ресурсов и других нрмальных достоинств. Я ведь указал на необходимую и достаточную степень нормализации, так как далнейшие ухищрения - тема для диссертаций, а не для практической работы. В общем, я считаю, что степень нормализации должна закладываться при логическом проектировании БД и в дальнейшем не понижаться, это конечно IMHO ;)


kserg@ukr.net   (2002-10-25 10:17:00) [33]

Спасибо >[NIKEL] ©
и >MsGuns © (24.10.02 20:02)
очень точно описал суть задачи - сразу вижу, что сталкивался с подобным. Действительно, ко всему прочему наварачивается задача входимости(построение дерева), но от данной задачи я пока отказался.
Если рассмотреть источник проблем в решении данной задачи - это поиск компромиса между требованиями достоверности данных(ведение кучи справочников), простотой ввода и теми сроками, котр. мне ставят на выполнение данной задачи...


Sergey13   (2002-10-25 10:05:00) [34]

2Delirium © (24.10.02 18:41)
>.. любая современная реляционная БД должна и обязана быть доведена до 3S нормальной формы
Позволю себе не согласиться. ИМХО прав Johnmen ©. Нормализация не догма и не цель, а только метод позволяющий избежать избыточности данных. Придумывалась эта штука во времена когда мегабайт памяти стоил лимон баксов. С тех пор мир сильно изменился. И для улучшения производительности (например) можно применять и ДЕнормализацию(то же кстати метод описанный в литературе).


MsGuns   (2002-10-24 20:02:00) [35]

Справочники - это, конечно, проблема (вернее, проблема создания их интерфейса), но главные проблемы в этом проекте - совсем не они ! Я понял, что надо держать состав изделий и ПКИ к ним. Вот это и естьГЛАВНАЯ проблема, т.к. там может быть древо, да еще какое ветвистое 8). И с заявками тоже будут траблы те еще. Особенно если учитывать комплекты.

А на счет справочников - ИМХО, Val © (24.10.02 18:18)
дал дельный совет. И НИКАКИХ КОМБОБОКСОВ на БОЛЬШИЕ или многоколоночные справочники. В гриде с такими справочниками не работа, а мУка. Пока найдешь что надо, кинешь все на фиг. Первые буквы не походят, т.к. искать надо не по ключевому полю, а по одному из сопутствующих (причем иногда по одному - наименование, а иногда по другому - цена, а может быть еще по третьему, четвертому и т.д.). А на форму (справочник в гриде) можно положить фильтр, переупорядочить по любой колонке, использовать куда более мощные, чем в комбобоксе, средства поиска. Я уже не говорю о возможности тут же добавить в спр-к новую запись.
Но, повторюсь, это для СЛОЖНЫХ СПРАВОЧНИКОВ:
- больших по кол-ву записей
- имеющих большое кол-во сопутствующих полей
- состоящих их более чем одной таблицы (например, справочник бух.операций и сложных проводок к ним)
- требующих добавление (не удаление и не правку) "на лету"


[NIKEL]   (2002-10-24 19:55:00) [36]

Определись с понятиями, я делал так
есть такое понятие как ОПЕРАЦИЯ и соответственно таблица операция
у операции есть такие атрибуты как:
тип операции (призод, расход, списание, ввод нач. остатков и т.д.)
id операции
дата начала операции
дата конца операции (и возможно, дата когда операция должна завершиться, напртмер - резервирование товара по счету на опред. время)
id документа операции(документ основание - счет, заказ ...)
id контрагента участвующего в операции
поле to_sklad (на какой склад)
поле from_sklad (со склада)
поле op_can_edit (признак проведенности операции)
и возможно поле с комментарием

также существует таблица (назавем ее invoice) для отрожения данных по операции(т.е. какие товары и в каком количестве и по каой цене участвуют в операции) - поля
invoice_id
op_id (для какой операции данная запись)
goods_id - id товара
g_count - количество
price - за ед. товара
unit_id - id ед. измерения для товара

так вот когда свершается операция то в табл. operations добовляется запись с нужными значениями - и для этой операции заполняется табл. invoice
Также есть таблицы справочники, агенты, счета, банки, ГТД, группы товаров, товары, цены для товара, ед. измерения для товаров, договора, склады и т.д.

на самом деле я писал большую систему где много разных нюансов

Может скоро напишу статью, о том как я писал базу данных для магазина Автомобил. Запчасти и Клиента к ней :)




Xenon   (2002-10-24 19:44:00) [37]

ID-коды использовать все-таки придется.
Чтобы выбирать значения используй компонент TRxDBLookupCombo
из библиотеки RxLib. Очень удобно.


Delirium   (2002-10-24 19:14:00) [38]

"...чё-нибудь попроще..." - это не то, чем должен руководствоваться профессионал (или желающий таковым стать) в области БД.


kserg@ukr.net   (2002-10-24 18:57:00) [39]

Спасибо уважаемым знатокам.

Признаюсь надеялся услышать чё-нибудь попроще и при этом работоспособное решение

:(


Delirium   (2002-10-24 18:41:00) [40]

> Johnmen ©

Не углубляясь в теорию нормализации, смею утверждать, что любая современная реляционная (удовлетворяющая 12-и правилам Кодда) БД должнаи обязанабыть доведена до 3S нормальной формы (Бойса-Кодда) - Ни первичный ключ, ни какая-либо его часть не должны зависеть от не ключевого атрибута.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо