powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Может лучше сделать все одной таблицей?
80 сообщений из 80, показаны все 4 страниц
Может лучше сделать все одной таблицей?
    #38949197
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу помощи в проектировании БД (MS SQL).

Требуется спроектировать "БД оборудования" для дальнейшего создания спецификации (сохранять в отдельный файл с последующим экспортом в Word).

Вся сложность которая меня ставит в тупик это то, что у меня в БД нет, в принципе, (многократно) повторяющихся значений в записях, кроме завода изготовителя. Поэтому пока я представляю БД только двумя таблицами.
таблица [Main]
поля:
[ID]
[Name]
[Type]
[code]
[Key_Manufacturer]
[ed_izm]
[Weight]
[Dimension]
[Description]
[Date]
[Note]
[Image]

таблица [Manufacturer]
поля:
[Key_Manufacturer]
[Name]

Еще будет повторяться [ed_izm] (единицы измерения) - кг, тонн, литры, метры, километры и т.д. Но мне кажется проще вбивать руками текст и хранить текстом... хотя не знаю. Ну пусть будет 3 таблицы.

В главной таблице [Main] у меня получится не более 1.000.000 записей. В таблице [Manufacturer] не более 50 записей.

Стоит ли делать БД из 2-3 таблиц? Или проще все в одной сделать и не париться?

Дополнительно могу сказать про особенности записей:
Разные заводы могут делать одинаковое оборудование.
Почти все значения в таблице [Main] могут повторяться но не более 100 на 1M.

Отдельно хочется сказать про запись в файл (думаю xml). Выбранные записи в БД нужно будет формировать в спецификацию (в том же приложении где и будет выводиться БД. Я думаю, что проще это будет сделать по позиции [ID]. И хранить в файле просто этот [ID] + количество заказанного оборудования (отдельное поле).

Прошу помочь дельными советами в проектировании БД!
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949200
Фотография Wilhelm Holtoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ashoorup,
всё, что вы тут понаписали, выдаёт в вас зелёного новичка.

И потом, раз взялись делать по-хорошему, то вместо ed_izm сделайте уже Measure Unit, а то как-то не стыкуется с Weight, Dimension, Description

Основой любой БД являются классификаторы (справочники)
Займитесь сначала справочником единиц измерения, изучите этот нелёгкий вопрос, что такое единица измерения, какие системы единиц измерения существуют, и т.д.
А если руками будете вбивать текст "кг", "км", "м3", то потом проблем не оберётесь.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949201
Фотография Wilhelm Holtoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ashoorupсложность которая меня ставит в тупик это то, что у меня в БД нет, в принципе, (многократно) повторяющихся значений в записяхда, и забыл добавить - эта фраза лишена смысла.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949203
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нормальный справочник единиц измерений еще и позволяет пересчитывать тонны в килограммы и т.п. Если задачка не высосана из пальца, то его нужно делать добросовестно.

Тоже касается и классификации оборудования. Она может быть достаточно сложной, по нескольким критериям, каждый критерий - отдельная иерархия.

Свойства оборудования - еав.

Качественный, универсальный экспорт в ворд по шаблонам - это полдюжины-дюжина таблиц. Классификация шаблонов, привязка шаблонов к бизнес-сущностям, маппинг полей шаблонов на поля сущностей, сами шаблоны и готовые файлы в виде блоб полей.

Все перечисленное выше - штук 30 таблиц навскидку.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949205
Фотография Wilhelm Holtoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AshoorupОтдельно хочется сказать про запись в файл (думаю xml). Выбранные записи в БД нужно будет формировать в спецификацию (в том же приложении где и будет выводиться БД. Я думаю, что проще это будет сделать по позиции [ID]. И хранить в файле просто этот [ID] + количество заказанного оборудования (отдельное поле). Ну а этот бред не имеет никакого отношения к проектированию БД.
И вообще, вам проще всего будет нанять разработчика - специалиста по базам данных.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949208
Фотография Wilhelm Holtoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П-ЛСвойства оборудования - еав.Зачем вы издеваетесь над новичком? Разве по его посту не понятно, что он не знает, что такое EAV ?
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949212
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вдруг хороший, годный новичок - будет грызть гранит науки.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949215
Фотография Wilhelm Holtoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, но после его вопроса
Ashoorup Стоит ли делать БД из 2-3 таблиц? Или [b]проще все в одной сделать и не париться ?[/b] его будет преследовать Святая Инквизиция
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949218
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я и есть зеленый новичок - не скрываю.

Measure Unit - принял!

Тогда делать надо 3 таблицы:
таблица [Main]
поля:
[ID]
[Name]
[Type]
[code]
[Key_Manufacturer]
[Key_Measure_Unit]
[Weight]
[Dimension]
[Description]
[Date]
[Note]
[Image]

таблица [Manufacturer]
поля:
[Key_Manufacturer]
[Name]

таблица [Measure_Unit]
поля:
[Key_Measure_Unit]
[Measure]
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949226
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы начинаете с конца.

СНАЧАЛА изложите коротко назначение, функциональные требования - что ваша база должна мочь. Отсюда будет видно, насколько глубоко надо прорабатывать те или иные части.

Ну и схему бд лучше выкладывать графическую. Бесплатный мс скл экспересс имеет нормальный редактор схем, можно выставить режим отображения таблиц, когда будут видны комментарии к каждому полю. Можно добавлять произвольные текстовки на схему. Фронт-енд на схему можно быстренько натянуть на аксесе.

Категорически против одинаковых полей Id Name в разных таблицах. При сшивании в запросе их придется алиасить. Я сразу именую ManufacturerID, ManufacturerName, UnitID, UnitName, ... Это вкусовщина, но так схема легче читается.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949231
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Данная работа это мой курсовой проект. Кому нравится и кому будет приятно - можно шутить, глумиться, показывать свое ЧСВ. Я не обидчивый.

Моя цель прежде всего научиться делать БД. Не для корочки в ВУЗе. Заказывать у спецов не буду однозначно. Программа будет реально работать на производстве.

Спасибо за понимание.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949250
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
П-ЛСНАЧАЛА изложите коротко назначение, функциональные требования - что ваша база должна мочь.
Я думал первого поста будет достаточно... Возможно что-то не учел...

Задумка такая:
Пользователь ищет по части наименования [Name] нужное оборудование. В таблице должны вывестись варианты (может делают несколько заводов, или есть разные исполнения). Далее пользователь выбирает нужную запись и добавляет ее в свою таблицу (спецификация), где потом только указывает количество. После того как спецификация сформирована - делает экспорт в Word.

П-ЛНу и схему бд лучше выкладывать графическую. Еслиб я умел. Но я готов учиться, так-что не подумайте, что я спрыгиваю :)
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949252
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AshoorupПрограмма будет реально работать на производстве.Вы можете в это искренне верить. Кто является заказчиком ? Кто - спонсором ? Результат проекта зависит от этих - ключевых вопросов а не от технических показателей. Может быть внедрено жуткое говнище, в котором будут страдать и мучаться юзеры, а качественное решение, напротив, выброшено за борт.

Постарайтесь таки сформулирвать требования к системе. В учебном проекте все равно должен быть этот важный раздел.

Какие средства для реализации предполагаете ? На чем будет клиент, сервер ?
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949257
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AshoorupП-ЛСНАЧАЛА изложите коротко назначение, функциональные требования - что ваша база должна мочь.
Я думал первого поста будет достаточно... Возможно что-то не учел...

Задумка такая:
Пользователь ищет по части наименования [Name] нужное оборудование. В таблице должны вывестись варианты (может делают несколько заводов, или есть разные исполнения). Далее пользователь выбирает нужную запись и добавляет ее в свою таблицу (спецификация), где потом только указывает количество. После того как спецификация сформирована - делает экспорт в Word.

П-ЛНу и схему бд лучше выкладывать графическую. Еслиб я умел. Но я готов учиться, так-что не подумайте, что я спрыгиваю :)

1. Это - детский сад, ясельная группа. Даже на учебный проект такой уровень изложения не тянет.

2. Установка и использование бесплатной редакции мс скл сервера вполне доступны новичку. Его графический редактор схем - тоже. От нуля можно смело начинать работать. За пару дней наработаете навыки.

Сейчас очень много разных средств рисования схем БД разной степени сложности и мощности, если есть особые предпочтения можете выбирать что-то еще.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949297
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну понятно что это не ТЗ.
Заказчик считайте я. Оплата обычная ЗП:) Не стоит относится к программе как нечто очень важному и ответственному. Сейчас это все руками делается. Но вообще подобную программу когда-то у нас уже написал один наш работник (вроде даже он был программистом) - ушел. Он сделал все в одной таблице. Прога на дельфях писана. Исходников не оставил. Скрин программы прилагаю.

Сейчас я после всех "рекомендаций" несколько растерялся и не знаю с какой стороны подступиться.

Пока я в Visual Studio уже слепил некое подобие вьвера БД (C#). Там же сделал в SSDT БД и две таблицы. Но они не связаны (не умею пока). Готов все нафик удалить и начать заново.

Давайте по порядку. Что сделать первое? Я выполню - покажу результат. Понятное дело, что вот прям все сразу все Ваши рекомендации я не выполню. Хочется последовательности.

Спасибо за понимание и терпение!
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949314
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ashoorup,

автор[ID]
[Имя]
[Тип]
[код]
[Key_Manufacturer]
[ed_izm]
[Вес]
[Размер]
[Описание]
[Дата]
[Заметка]
[Image]

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

у вас же непонятно что
авторВ главной таблице [Main] у меня получится не более 1.000.000 записей
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949330
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧто сделать первое?

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

Общее назначение системы. Что такое оборудование. Что такое спецификация. Как ведется каталог оборудования. Какие с ним нужно выполнять действия (бизнес-функции). Как наполняется спецификация. Что с ней можно/нужно делать.

Из приведенных данных видно, что оборудования довольно много. Удобно с ним работать в виде плоского списка ? Нужна классификация/каталогизация ? Наименование, технические характеристики почему склеены вместе ? Что такое код оборудования ? Нужно вести учет оборудования в количественном исчислении ? Может оборудование пакетироваться (одна упаковка в общей таре - 12 шт. единиц) ?

Собранные спецификации имеют какой-то жизненный цикл (новая, черновик, готова, обработана, исполнена) ? Надо хранить историю обработки спецификаций ?
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949556
Фотография Wilhelm Holtoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П-Л,

ТС же сказал, что это курсовая работа.
А то что вы перечислили тянет на хорошую дипломную,
а по объёму работы и на кандидатскую диссертацию.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949577
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wilhelm HoltoffТС же сказал, что это курсовая работа.
Курсовая работа призвана показать чему ТС научился в течении этого самого курса. Пусть
делает одну таблицу, получит заслуженную двойку и больше никогда не подходит к
программированию.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949615
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хоть примерно понял, что Вы от меня хотите добиться:) В любом случае вся эта текстовка/описание пойдет для курсовой в пояснительную записку.

Назначение системы (я бы назвал это попроще - программа для работы со спецификацией)
Система предназначена для работников проектных организаций и осуществляет работу с БД оборудования устройств автоматики, телемеханики и связи на железнодорожном транспорте.

по сути система должна решать две задачи:
1. выдача справочных данных оборудования для проектировщика (например габаритные размеры оборудования),
2. составление спецификации (т.е. подготовка/выдача проектной документации)


Требования к системе
Система должна обеспечивать:
-поиск необходимого оборудования в БД по всем полям
-вывод результатов поиска в виде таблицы со всеми характеристиками оборудования
-многоуровневый доступ: "Администратор", "Редактор БД", "Пользователь"
-редактирование БД средствами системы
-создание таблицы спецификации
-добавление выбранного оборудования в спецификацию
-сохранение и последующее открытие сформированной спецификации
-многодокументный режим с возможностью копирования записей из одной спецификации в другую
-экспорт спецификации в Word

Оборудование в системе должно быть представлено для пользователя следующими полями:
-Наименование оборудования - текстовое поле до 200 знаков
-Тип, марка, обозначение - текстовое поле до 50 знаков
-Код оборудования - - текстовое поле до 50 знаков
-Завод изготовитель - - список (отдельная таблица) не более 50 записей
-Единицы измерения - - список (отдельная таблица) не более 20 записей
-Масса (кг) - - float поле до 10 знаков
-Габаритные размеры - текстовое поле до 30 знаков
-Снято с производства - bool checkbox птичка установлена - снято с производства. Как отображать под вопросом еще.

-Изображение Будет отображаться не в таблице (на форме в углу)

Спецификация должна соответствовать ГОСТ (потом поищу какой - там все поля строго именованы и расположены)
В таблице "Спецификация" поле "Количество" должно редактироваться пользователем.

Редактирование каталога оборудования (БД) осуществляет пользователь "Редактор БД". Система должна обеспечивать контроль добавляемого оборудования на полный повтор записи.


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

авторИз приведенных данных видно, что оборудования довольно много. Удобно с ним работать в виде плоского списка ? - Да удобно. Пользователь например ищет оборудование "светофор" по полю "Наименование"- ему должно вывестись в той же таблице все записи содержащие данное слово. Модификаций может быть около 100. Затем он фильтрует то что найдено задавая критерии поиска в других полях. Например Завод-изготовитель. Одно и то же оборудование может делать несколько заводов. (очень врядли будут искать оборудование по другим полям). Может быть в очень редких случаях пользователь будет искать оборудование по коду изделия.
авторНаименование, технические характеристики почему склеены вместе ? - Так и должно быть. В таком виде спецификация передается заказчику (типа стандарт). Разбивать нет смысла.
авторНужна классификация/каталогизация ? - Думаю нет. Я хорошо думал над этим :) не получится, да и не нужно.
авторЧто такое код оборудования ? - просто текстовое поле. Оно и из цифр и из букв и из точек с прочерками и возможно даже с национальными символами. Пользователь может по нему искать оборудование. Может повторяться.
авторНужно вести учет оборудования в количественном исчислении ? Может оборудование пакетироваться (одна упаковка в общей таре - 12 шт. единиц) ? Нет. В БД не нужно. Количество указывается уже в спецификации.

авторСобранные спецификации имеют какой-то жизненный цикл (новая, черновик, готова, обработана, исполнена) ? Надо хранить историю обработки спецификаций ?
Ну как бы нет... Черновик - это то что сохранили файл. Готово это то что экспортировали в Word. Специальных статусов нет. Вернее они есть но это задача системы документооборота - это она определяет статус файла/объекта .

А вот насчет истории... тут мне нужен совет.
Дело в том, что запись в БД может меняться. Например завод сменил наименование оборудования для заказа, или например ошибка "Редактора БД". Но пользователь уже добавил эту запись в спецификацию. И хорошо бы ему просигнализировать, если он откроет спецификацию, что такая-то запись изменилась в БД (причину указывать и хранить не нужно). Т.е. как бы надо хранить дату внесения изменения в БД и соответственно копировать ее в спецификацию, но не отображать там (только в файле).
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949623
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovКурсовая работа призвана показать чему ТС научился в течении этого самого курса. Пусть
делает одну таблицу, получит заслуженную двойку и больше никогда не подходит к
программированию.

+100500
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949632
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ashoorup,

тогда можно предположить, что
ваша mainэто огромный прайсспецификация заказ с полями кому/дата/наименование/составитель .....спецификацияСоставвыбранные из прайса позиции, причем если из прайса удалили, то добавлять в комментарий сообщение об этом ,периодически выдавать отчет строк, которых нет в прайс
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949643
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Давайте не будем уходить от темы все таки и переходить на морально-этические стороны вопроса. Я мог бы взять любую другую прогу в сети и выдать ее за свою, получить пять и быть двоечником. Но я честно написал что хочу научиться ! Прошу только немного в этом помочь , и мне как я вижу уже помогают, что конечно же приятно! Причем отвечают довольно быстро. Я благодарен форумчанам за это!
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949704
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКАтогда можно предположить, что
ваша mainэто огромный прайсспецификация заказ с полями кому/дата/наименование/составитель .....спецификацияСоставвыбранные из прайса позиции, причем если из прайса удалили, то добавлять в комментарий сообщение об этом ,периодически выдавать отчет строк, которых нет в прайс
main - ну пускай будет прайс, только цен там нет и не планируется (уж очень плавающая позиция - некому отслеживать)
спецификация - нет такого чтобы отдельно заказ шел одному, отдельно другому. Все проще. По какому-то объекту строительства перечисляется все оборудование которое нужно заказать и оформляется в виде документа "Спецификация". Посчитать цену это задача отдела смет... ну как бы это совсем другая песня, хоть и можно подумать над дальнейшем расширением функционала.
спецификацияСостав - я думаю это должна быть одна таблица Спецификация. А вот насчет удаленной позиции я и написал - тут надо отслеживать дату редактирования. Причем именно дату - пользователю может и не нада дата редактирования записи, а вот Редактору БД может пригодиться. Например одна и таже запись может редактироваться несколько раз. И нужно знать когда ее редактировали а не то что ее вообще редактировали.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949776
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AshoorupПЕНСИОНЕРКАтогда можно предположить, что
ваша mainэто огромный прайсспецификация заказ с полями кому/дата/наименование/составитель .....спецификацияСоставвыбранные из прайса позиции, причем если из прайса удалили, то добавлять в комментарий сообщение об этом ,периодически выдавать отчет строк, которых нет в прайс
main - ну пускай будет прайс, только цен там нет и не планируется (уж очень плавающая позиция - некому отслеживать)
спецификация - нет такого чтобы отдельно заказ шел одному, отдельно другому. Все проще. По какому-то объекту строительства перечисляется все оборудование которое нужно заказать и оформляется в виде документа "Спецификация". Посчитать цену это задача отдела смет... ну как бы это совсем другая песня, хоть и можно подумать над дальнейшем расширением функционала.
спецификацияСостав - я думаю это должна быть одна таблица Спецификация. А вот насчет удаленной позиции я и написал - тут надо отслеживать дату редактирования. Причем именно дату - пользователю может и не нада дата редактирования записи, а вот Редактору БД может пригодиться. Например одна и таже запись может редактироваться несколько раз. И нужно знать когда ее редактировали а не то что ее вообще редактировали.
Катастрофическая ошибка. Спецификации и их состав - ДВЕ РАЗНЫЕ таблицы.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949829
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. "Спецификация состав" это некая промежуточная таблица (временная) используемая как буфер? Что-то я запутался совсем
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949897
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторт.е. "Спецификация состав" это некая промежуточная таблица (временная) используемая как буфер? Что-то я запутался совсем

Нет конечно.

Справочник типов оборудования - для классификации оборудования.
Справочник единиц измерения - для использования в обрудовании.
Справочник оборудования - полный перечень всех видов (единиц) оборудования. Ссылается на айди единицы измерения.
Таблица спецификаций - одна спецификация - одна запись. Соответствует шапке вордовского документа.
Таблица состава спецификации по единицам оборудования - каждая запись имеет ссылку на айди спецификации, айди оборудования и количество оборудования. Соответствует табличке в вордовском документе.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38949915
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AshoorupВсе проще. По какому-то объекту строительства перечисляется все оборудование которое нужно заказать и оформляется в виде документа "Спецификация"

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

это физически и логически не может быть создано одномоментно
и это не считая дополнительных спецификаций, разных цен, разных поставщиков одного и того же пробукта
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38950057
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКАуверена, что спецификаций не одна, а много на 1 объект

Ну конечно не одна.
Спецификация постового оборудования изделий и материалов
Спецификация напольного оборудования изделия и материалов
Спецификация кабельной продукции
Спецификация запасного имущества
Еще бывают несколько типов но крайне редко. Но это все по структуре одинаковые спецификации - только штамп разный.

В общем ночь большая сегодня попробую посидеть в SSDT что-то накидать на что мозга хватит - будет картинка - можно будет что-то корректировать.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951006
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос несколько не по теме:
Стоит ли заморачиваться на названиях БД, таблиц, запросов в плане русских букв и пробелов? Программа не планируется для "не русскоговорящих". БД проектирую в SQL Server 2014 Express. Программу в MS Visual Studio 2013
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951140
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AshoorupВопрос несколько не по теме:
Стоит ли заморачиваться на названиях БД, таблиц, запросов в плане русских букв и пробелов? Программа не планируется для "не русскоговорящих". БД проектирую в SQL Server 2014 Express. Программу в MS Visual Studio 2013

В общем случае не рекомендуется использовать русские символы и пробелы, плюс ряд специфичных символов, т.к. это может привести к проблемам при работе с БД из сторонних приложений.
Но если вы точно уверены, что ваша БД будет использоваться только в определенном окружении, то можно и не заморачиваться.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951141
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже за одно то, что в редакторе sql кода или при разработке клиента не надо переключать языки. На пробелы - вообще ужос. Где ж это видано - имя переменной С ПРОБЕЛОМ ?
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951142
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulAshoorupВопрос несколько не по теме:
Стоит ли заморачиваться на названиях БД, таблиц, запросов в плане русских букв и пробелов? Программа не планируется для "не русскоговорящих". БД проектирую в SQL Server 2014 Express. Программу в MS Visual Studio 2013

В общем случае не рекомендуется использовать русские символы и пробелы, плюс ряд специфичных символов, т.к. это может привести к проблемам при работе с БД из сторонних приложений.
Но если вы точно уверены, что ваша БД будет использоваться только в определенном окружении, то можно и не заморачиваться.В общем латиница гарантирует от возможных проблем.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951144
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну в общем накидал я как мог и то как я понимаю структуру базы. Переговорив с будущими пользователями, ТЗ поменялось, в связи с чем выросло количество таблиц. Получилось 9.
Что собственно поменялось:
В базе необходимо хранить данные о готовых спецификациях и о пользователях которые ее делали. Нужно это например для того, чтобы взять за образец или сделать на основе выданной спецификации новую.

Таблицы:
(PK красным)

"Каталог оборудования" [Equipment catalogue]
Имя столбца Тип Описание ID_Equipment int Идентификатор оборудованияName nvarchar(MAX) Наименование оборудованияModel nvarchar(20) Тип и марка оборудованияIndicator nvarchar(20) Код оборудованияID_Manufacturer int Идентификатор завода-изготовителя[ID_Measure Unit] int Идентификатор единиц измеренияWeight float Масса оборудования в килограммахDimension nvarchar(20) Габаритные размеры оборудованияDiscontinued bit Снято с производстваImage image Изображение (фото/чертеж) оборудованияDescription nvarchar(MAX) Описание оборудованияNote nvarchar(MAX) Примечание к оборудованию сделанное пользователем "Редатктор БД"

Заводы-изготовители [Manufactures]
Имя столбца Тип Описание ID_Manufacturer int Идентификатор завода-изготовителяName nvarchar(50) Краткое наименование завода-изготовителяDescription nvarchar(MAX) Описание завода-изготовителя (адрес)Logo image Логотип завода-изготовителя
Единицы измерения [Measure Units]
Имя столбца Тип Описание [ID_Measure Unit] int Идентификатор единиц измеренияName nvarchar(10) Сокращение единицы измерения
Строка спецификации [Specification line]
Имя столбца Тип Описание [ID_Specification line] int Идентификатор строки спецификацииID_Equipment int Идентификатор оборудованияCount float Количество заказываемого оборудования[User note] nvarchar(MAX) Примечание
Спецификация [Specification]
Имя столбца Тип Описание ID_Specification int Идентификатор спецификации[ID_Specification line] int Идентификатор строки спецификацииID_User int Идентификатор пользователя[ID_Specification type] int Идентификатор типа спецификации[ID_Specification status] int Идентификатор статуса спецификации[Object number] nvarchar(30) Номер объекта строительства[Construction project] nvarchar(50) Объект строительства (название станции или перегона)[Object name] nvarchar(300) Наименование объекта[Save date] date Дата последнего сохранения
Пользователи [Users]
Имя столбца Тип Описание ID_User int Идентификатор пользователяName nvarchar(100) Фамилия И.О. пользователяPassword varchar(10) ПарольID_Account int Идентификатор учетной записи
Учетные записи [Account]
Имя столбца Тип Описание ID_Account int Идентификатор учетной записи[User account] varchar(20) Наименование учетной записи
Статусы спецификации [Specification statuses]
Имя столбца Тип Описание [ID_Specification status] int Идентификатор статуса спецификацииStatus nvarchar(20) Наименование статуса спецификации
Типы спецификаций [Specification types]
Имя столбца Тип Описание [ID_Specification type] int Идентификатор типа спецификацииType nvarchar(100) Тип спецификации (сокращенно)[Specification name] nvarchar(300) Наименование спецификации (для штампа)

Представления (связи):
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951145
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так будет представляться строка:
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951148
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот так данные по спецификациям которые сделали пользователи:
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951166
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так общая структура у меня выглядит:
(сегодня наверно мой мозг взорвется)
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951384
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возникает у меня проблема с сохранением записей за конкретным пользователем.
Т.к. приложение теперь многопользовательское и база одна, то разумно предположить, что одновременно несколько человек будут добавлять свои записи в таблицу Specification line. Остается только закрепить конкретные строки за конкретным пользователем+еще кучу полей идентификации конкретной спецификации.

Сначала я думал сделать временный массив для каждого пользователя, который после набора определенного оборудования из таблицы Equipment catalog нажмет сохранить и весь массив скопируется в таблицу Specification line. Тогда в таблице Specification вместо поля ID_Specification line нужно два поля - начало и конец записи конкретной спецификации. Но тут возникает проблема когда другой пользователь запишет в таблицу Specification line свой диапазон записей вслед, а предыдущий решит добавить еще записей. Вобщем идея не катит. Ну не перелопачивать же все записи, двигать там и пр...

Следующая идея хранить в таблице Specification в поле ID_Specification line список записей (ID_Specification line из таблицы Specification line) пользователя. Тогда всё равно где находится запись. Единственное меня смущает, если пользователь удалит запись(и) и в таблице Specification line образуются "дыры". Другому пользователю я не знаю как "сообщить" про "дыру" в таблице, чтоб он туда писал. Со временем "дыр" может стать больше чем записей, т.к. процесс формирования спецификации пользователем дело долгое с постоянными правками.

Возможно несу ерунду, и все можно решить гораздо более практично. Прошу подсказать что делать
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951411
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AshoorupВозникает у меня проблема с сохранением записей за конкретным пользователем.
Т.к. приложение теперь многопользовательское и база одна, то разумно предположить, что одновременно несколько человек будут добавлять свои записи в таблицу Specification line. Остается только закрепить конкретные строки за конкретным пользователем+еще кучу полей идентификации конкретной спецификации.

Сначала я думал сделать временный массив для каждого пользователя, который после набора определенного оборудования из таблицы Equipment catalog нажмет сохранить и весь массив скопируется в таблицу Specification line. Тогда в таблице Specification вместо поля ID_Specification line нужно два поля - начало и конец записи конкретной спецификации. Но тут возникает проблема когда другой пользователь запишет в таблицу Specification line свой диапазон записей вслед, а предыдущий решит добавить еще записей. Вобщем идея не катит. Ну не перелопачивать же все записи, двигать там и пр...

Следующая идея хранить в таблице Specification в поле ID_Specification line список записей (ID_Specification line из таблицы Specification line) пользователя. Тогда всё равно где находится запись. Единственное меня смущает, если пользователь удалит запись(и) и в таблице Specification line образуются "дыры". Другому пользователю я не знаю как "сообщить" про "дыру" в таблице, чтоб он туда писал. Со временем "дыр" может стать больше чем записей, т.к. процесс формирования спецификации пользователем дело долгое с постоянными правками.

Возможно несу ерунду, и все можно решить гораздо более практично. Прошу подсказать что делать
Несете ерунду.
У вас Specificafion_Line (пробелы - то в именах зачем ? штоб все время скобки ставить ?) и Specification сделаны с точностью до наоборот. Айди из Specification должен быть в качестве ФК в Specificafion_Line. ОДНА спецификация содержит МНОГО записей по оборудованию. В форме данные Specification будут в шапке - мастер запись. Детальные записи Specificafion_Line во вложенной форме-табличке, связанные через ID_Specifiaction. Это самые азы, они описаны во всех учебниках.

Ну и организацию работы в форме вы себе не представляете - такое написали, что ... печатных слов нет.

Есть команда приложения "Создать спецификацию" - кнопка, пункт меню, ... Нажали! Открылась форма спецификации с шапокой и детальной табличкой. Задали в шапке основные данные спецификации. Пользователь автоматически триггером записался поле ID_User. Наполнили спецификацию позициями из каталога. Ффсе, можно закрывать форму. Через айди мастер-записи позиции спецификации неотрывно связаны с самой спецификацией.

У вас есть таблица Specification и таблица Specification_types. Название поля Specification_Name вопиет о том, что это - атрибут (имя) - специфкации. Ан нет, оно лежит в таблице Specification_types и по смыслу означает Specification_type_Name. Маленький ребус-кроссворд. Побольше таких приятных мелочей в своем приложении и вы сделаете процесс сопровождения и разработки нескучным и увлекательным.

Про пробелы в полях уже написал.

Названия таблиц - то в единственном числе, то во множественном. Пустячок, а приятно.

Одинаковые поля Name в нескольких таблицах - про это я как-то выше писал. Сошьете в запросе две таблицы - нужно будет алиасить. И все время следить - то ли это .Name то ли .<что-то>_Name. Еще вклад в копилочку самим собой разложенных граблей.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951417
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжение.

Чуть по-другому, если ОДНА спецификация будет правится НЕСКОЛЬКИМИ пользователями и вы хотите это фиксировать. Здесь на форуме по проектирования и по MS SQL есть масса готовых рецептов аудита. Я в свое время выбрал один, достаточно простой.

Каждая прикладная таблица имеет поля:
InsertUserID - кто создал
InsertDatetime - дата создания
SaveUserID - кто последний сохранил
SaveDatetime - дата последнего сохранения

для практических разборок этого оказалось достаточно. Эти поля добавляются автоматическим скрипом вместе с заполняющим их триггером, когда таблица регистрируется как прикладная.

При работе с таблицами все поля заполняются автоматически триггерами. На прикладных формах поля выводятся во всех гридах и на всех формах-карточках - т.е. видя любой бизнес-объект можно видеть его создателя и последнего редактора.

Если ваша спецификация и позиции спецификации будут иметь подобны поля, то вы тоже сможете контролировать этот процесс. На таблицы спецификаций и позиций спецификации можно повесить бизнесовый триггер, который будет запрещать редактирование, если спецификация уже распечатана. Пока то что нарисовали не выходит за рамки простой демонстрационной/учебной базы Борей/Northwind, которую Микрософт долго включала в поставку своего офиса (аксес). Был также клиент-серверный вариант этой базы - фронт Access ADP, клиент - MS SQL сервер. Можете нагуглить, скачать и посмотреть. Там все формы работают.
http://www.microsoft.com/en-us/download/details.aspx?id=23654
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951421
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переключите все таблицы на диаграмме в режим кастом, задайте для кастомного режима вывод имя, тип и ОПИСАНИЯ к полю. Рядом с каждой таблицей создайте комментарий и в одном-двух абзацах опишите смысл таблицы и ее главный особенности. Тогда штатный редактор диаграмм станет хорошим рабочим инструментом проектирования.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951442
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сущность объект строительства надо выносить в отдельную таблицу и, видимо, сильно развивать.
С полями типа бит в некоторых клиентах могут быть проблемы. Я бы делал кондово nvarchar(1) Y/N. Смысл экономить биты...
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951591
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчет идей хранения... это я ступил, сознаюсь:) Переделал как рекомендовали. Даже понравилась проделанная работа! Красиво и наглядно. Мне уже нравится работать в Managment Studio.

Вот только я не понимаю насчет одинаковых полей. Для примера напишите хотя бы несколько как например можно было бы именовать их.
И насчет проблем с полями типа bit недопонял. У меня все прекрасно работает... Редактор БД будет ставить птичку если оборудование снято с производства. Возможно потом сделаю розовую подсветку строки, если оборудование снято с производства - для большей наглядности.

Насчет интефейса, то я впринципе так и планировал как Вы описали. Только штамп будет на форме открытия/создания спецификации. В главном окне штамп будет занимать лишнее место. На главной форме будет таблица каталога оборудования (если пользователь открыл программу как справочник). Если открыл как пользователь/редактор спецификации, то вверху будет таблица каталога и ниже новая спецификация с добавляемыми полями.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951620
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл написать:
- с одной спецификацией будет работать 1 пользователь. Такого точно не будет, что с одной спецификацией одновременно будет работать несколько пользователей.
- одну спецификацию может делать несколько пользователей. Тут все просто как мне кажется. Пользователь чья спецификация, или администратор может назначить другого пользователя для редактирования этой спецификации.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951655
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчёт "Сущность объект строительства":
Мне кажется достаточно описания в таблице Specifications, хотя под один объект (номер объекта, наименование объекта, объект строительства) может быть от 1 до 5 спецификаций. Может и стоит сделать отдельную таблицу под объект...
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951660
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ashoorup,

в таблице specification_lines забыли про поле уникальноко ключа id_specification_lines
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951714
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AshoorupНасчёт "Сущность объект строительства":
Мне кажется достаточно описания в таблице Specifications, хотя под один объект (номер объекта, наименование объекта, объект строительства) может быть от 1 до 5 спецификаций. Может и стоит сделать отдельную таблицу под объект...
Абсолютно категорически делать отдельную таблицу.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951722
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AshoorupЗабыл написать:
- с одной спецификацией будет работать 1 пользователь. Такого точно не будет, что с одной спецификацией одновременно будет работать несколько пользователей.
- одну спецификацию может делать несколько пользователей. Тут все просто как мне кажется. Пользователь чья спецификация, или администратор может назначить другого пользователя для редактирования этой спецификации.
Этого достаточно. Если хотя бы раз несколько пользователей могут менять спецификацию или ее состав - надо хранить информацию о пользователе в таблице позиций спецификаций. Примеры полей я приводил выше. Их добавление и заполнение во всех прикладных таблицах ничего не стоит - работает один раз сделанный автомат. С учетом того, что предполагается реальное, производственное использование - я бы обязательно сделал такой простой и компактный аудит.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951745
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВот только я не понимаю насчет одинаковых полей. Для примера напишите хотя бы несколько как например можно было бы именовать их.

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

EquipmentID Идентификатор оборудования
EquipmentName Наименование оборудования
EquipmentModel Тип и марка оборудования
EquipmentCode Код оборудования
ManufacturerID Идентификатор завода-изготовителя
MeasureUnitID int Идентификатор единиц измерения
EquipmentWeight float Масса оборудования в килограммах
EquipmentDimension Габаритные размеры оборудования
EquipmentDiscontinuedFlag Снято с производства
EquipmentImage Изображение (фото/чертеж) оборудования
EquipmentDescription Описание оборудования
EquipmentNote Примечание к оборудованию сделанное пользователем "Редатктор БД"

Заводы-изготовители Manufacturer

ManufacturerID Идентификатор завода-изготовителя
ManufacturerName Краткое наименование завода-изготовителя
ManufacturerDescription Описание завода-изготовителя (адрес)
ManufacturerLogo Логотип завода-изготовителя

Единицы измерения MeasureUnit

MeasureUnitID int Идентификатор единиц измерения
MeasureUnitName Сокращение единицы измерения

Строка спецификации SpecificationLine

SpecificationLineID Идентификатор строки спецификации
EquipmentID Идентификатор оборудования
EquipmentCount Количество заказываемого оборудования
SpecificationLineNote Примечание

Спецификация Specification

SpecificationID Идентификатор спецификации
UserID Идентификатор пользователя
SpecificationTypeID Идентификатор типа спецификации
SpecificationStatusID Идентификатор статуса спецификации
ObjectID Номер объекта строительства

Статусы спецификации SpecificationStatus

SpecificationStatusID Идентификатор статуса спецификации
SpecificationStatusName Наименование статуса спецификации

Типы спецификаций SpecificationType

SpecificationTypeID Идентификатор типа спецификации
SpecificationTypeCode Тип спецификации (сокращенно)
SpecificationTypeName Наименование спецификации (для штампа)

Однообразно до отвращения - чем и хорошо. Таблица в единственном числе. Суффиксы -
ID - автосчетчик
Code - код, шифр, номер
Name - наименование
Description - длинное описание


авторИ насчет проблем с полями типа bit недопонял. У меня все прекрасно работает... Редактор БД будет ставить птичку если оборудование снято с производства. Возможно потом сделаю розовую подсветку строки, если оборудование снято с производства - для большей наглядности.
В некоторых клиентах МОГУТ быть проблемы. С кодом Y | N проблем быть не может. Если есть выбор дороги, на которой заведомо нет граблей, то я иду по ней.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951791
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА, П-Л,
Спасибо за замечания!

П-ЛЭтого достаточно. Если хотя бы раз несколько пользователей могут менять спецификацию или ее состав - надо хранить информацию о пользователе в таблице позиций спецификаций. Примеры полей я приводил выше. Их добавление и заполнение во всех прикладных таблицах ничего не стоит - работает один раз сделанный автомат. С учетом того, что предполагается реальное, производственное использование - я бы обязательно сделал такой простой и компактный аудит.

Ну вот вроде бы понимаю, что можно каждую запись "пометить" тем пользователем который ее добавил, только не понимаю зачем это надо.
У одной спецификации может быть только один разработчик. Этот разработчик может переложить свою работу на другого пользователя или это может сделать администратор (пользователь заболел например). Т.е. в таблице Specifications просто смениться ID_User.

Имена полей немного поменял (по своему вкусу) с учетом рекомендаций. ID вначале имени мне привычнее. Поля с "неоднозначными" именами (в том числе и повторяющиеся) name, user сменил на более информативные.
Имена таблиц мне кажется должны быть во множественном числе.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951815
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Постоянно консультируюсь с будущими пользователями... чую курсовой в диплом перетечет. Сразу столько "хотелок" я не ожидал.
Например в формируемую таблицу нужно будет добавлять поля не из каталога. Причем и нумерацию строк надо будет сделать с учетом этой строки.
А добавлять надо строки:
ОБОРУДОВАНИЕ:
ИЗДЕЛИЯ И МАТЕРИАЛЫ:
<Пользовательская строку>:
Это своего рода разделитель в общем списке
Ну и нумерация соответственно:
1 ОБОРУДОВАНИЕ:
1.1
1.2
1.3
1. ...
2 ИЗДЕЛИЯ И МАТЕРИАЛЫ:
2.1
2.2
....
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951845
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам надо закладываться на иерархическую спецификацию, состоящую из нескольких разделов, каждый из которых в свою очередь (рекурсивно) может иметь несколько подразделов и т.д. В БД это реализуется ссылкой на себя ID - ParentID. На экране ОБЯЗАТЕЛЬНО должен быть нормальный иерархический/древовидный контрол. При щелчке по узлу должно быть отражено его содержание (с возможностью редактирования). Перемещение уровней вверх/вниз и автоматическая (пере)нумерация. В принципе не очень сложно, многое зависит от клиентского средства. Я несколько лет назад делал на мс скл сервер + аксес адп, дополненный обычным виндоузным тривью.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951889
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас соберу мозги после взрыва :)
Честно говоря не понимаю зачем эта иерархическая структура. Можно поподробнее что Вы имеете ввиду и как это должно выглядеть применительно к моей базе.

Еще вопрос такой. Вот я задал размер некоторых полей 30, 50, 150 и т.д. Вот вроде бы с запасом от 20% до 200%. А вот если случится беда и как выяснится неподрасчитал и нужно потом увеличить? Как я понимаю это довольно большая проблема для клиентского приложения. Если я поля сделаю все MAX или все увеличу до больших размеров так чтобы наверняка, чем это плохо?
Понимаю, что ламерские вопросы, но все же.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951905
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы же сами только что заявили, что в спецификации должно быть несколько (более одного) раздела. При разрастании спецификации или ее усложнении очень велика вероятность, что какой-то раздел придется раздробить на подразделы. И так далее. Это - абсолютно стандартный паттерн - древовидная/иерархическая структура.

Посмотрите на проводник в режиме отображения структуры папок.

Делается несложно, чуть возни с перенумерацией и красивым отображением на экране, чтобы схлопывалось - раскрывалось.

Таблица спецификаций должна быть разбита на две. Первая будет хранить структуру уровней спецификации. Вторая - собственно принадлежность единиц оборудования из каталога той или иной веточке структуры.

То, что вы сейчас мучительно открываете, на самом деле - стандартные, давно хорошо обкатанные паттерны проектирования. Проблема только в том, что вам они не знакомы. Поэтому я в самом начале предлагал вам сформулировать функциональные требования, как можно полнее и четче. Структура БД из них лепится без напряжения, достаточно одного спинного мозга, головной может отдыхать.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951944
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переговорил с "заказчиком", обсудили.

В общем думаю надо добавлять еще одно поле ID_Section в таблицу Equipment_catalogue, ну и естественно добавлять таблицу Sections, где будут перечислены разделы.
Условно все оборудование в каталоге можно разделить на этих два раздела (Оборудование, Изделия и материалы). И пользователю будет очень удобно при наборе спецификации чтобы автоматом создавался (если нет) раздел и оборудование автоматом добавлялось в этот раздел. Подразделов не бывает в принципе. Но бывают скажем так "авторские разделы" с произвольным именем. Тут я думаю сделать кнопку создания раздела и пользователь потом будет перетягивать из другого раздела в этот "авторский". Или сделать птичку чтобы любое оборудование добавляемое шло в этот авторский раздел.

Что думаете насчет такого подхода?
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951989
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так примерно получается:
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38951999
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AshoorupПереговорил с "заказчиком", обсудили.

В общем думаю надо добавлять еще одно поле ID_Section в таблицу Equipment_catalogue, ну и естественно добавлять таблицу Sections, где будут перечислены разделы.
Условно все оборудование в каталоге можно разделить на этих два раздела (Оборудование, Изделия и материалы). И пользователю будет очень удобно при наборе спецификации чтобы автоматом создавался (если нет) раздел и оборудование автоматом добавлялось в этот раздел. Подразделов не бывает в принципе. Но бывают скажем так "авторские разделы" с произвольным именем. Тут я думаю сделать кнопку создания раздела и пользователь потом будет перетягивать из другого раздела в этот "авторский". Или сделать птичку чтобы любое оборудование добавляемое шло в этот авторский раздел.

Что думаете насчет такого подхода?
Думаю, что вы не можете сформулировать требования.

авторУсловно все оборудование в каталоге можно разделить на этих два раздела (Оборудование, Изделия и материалы).
Подразделов не бывает в принципе. Каталог состоит из фиксированного числа разделов. Любая единица оборудование в каталоге относится к тому или иному, одному разделу. (в реальности фотосумка - в разделе сумок ? в разделе фототехники ?). Категорический отказ от многоуровнего каталога в будущем может аукнуться невозможностью более тонкой классификации.

авторИ пользователю будет очень удобно при наборе спецификации чтобы автоматом создавался (если нет) раздел и оборудование автоматом добавлялось в этот раздел.
Спецификация состоит из тех же разделов, что и каталог оборудования ? Пустые разделы создаются при создании спецификации ? При добавлении первого оборудования из раздела, которого еще нет в спецификации ?

авторНо бывают скажем так "авторские разделы" с произвольным именем. Тут я думаю сделать кнопку создания раздела и пользователь потом будет перетягивать из другого раздела в этот "авторский". Или сделать птичку чтобы любое оборудование добавляемое шло в этот авторский раздел.
Совершенно невнятно и непонятно. Смешано описание структуры и процедуры наполнения данными. Сумбур. Какие кнопки, какие птички...
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952038
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
П-ЛКаталог состоит из фиксированного числа разделов. Любая единица оборудование в каталоге относится к тому или иному, одному разделу. (в реальности фотосумка - в разделе сумок ? в разделе фототехники ?). Категорический отказ от многоуровнего каталога в будущем может аукнуться невозможностью более тонкой классификации.
В каталоге одна запись оборудования - один раздел. Одно и тоже оборудование не может быть в двух разделах (в каталоге).
П-Л1. Спецификация состоит из тех же разделов, что и каталог оборудования ?
2. Пустые разделы создаются при создании спецификации ?
3. При добавлении первого оборудования из раздела, которого еще нет в спецификации ?
1. Да.
2. Пустые разделы? Думаю не будет таких. Все оборудование (в каталоге) разделится четко на разделы. В спецификации будет как минимум 1 раздел всегда.
3. Создается строка с именем раздела и ниже добавляется выбранное из каталога оборудование (картинку прилагаю)

авторНо бывают скажем так "авторские разделы" ...
Совершенно невнятно и непонятно. Смешано описание структуры и процедуры наполнения данными. Сумбур. Какие кнопки, какие птички...[/quot]
Под "авторским разделом" я понимаю раздел, который создал сам пользователь в своей спецификации (не каталоге). И занес в спецификацию, из каталога, то оборудование, которое посчитал нужным, даже если оно относится к другому разделу.

Вот есть например "Светофор" - это в разделе "Оборудование". И есть "Линза светофора" - это уже "Изделие и материалы".
Крайне редко может появится еще какой раздел (для заказчика) например "Мостовое оборудование" и тот же светофор пойдет в этот раздел.

Ну вот не получается четкой классификации. Все оборудование делится... ну пусть хоть на 10 разделов. Но подразделов все равно нет и не планируется. И классификации не планируется - это все только усложнит поиск и наполнение каталога - пользы никакой.

В спецификации пользователь еще должен иметь возможность добавлять запись не из каталога. Т.е. написать руками, заполнив все поля. Проблем тут не вижу. Просто поле ID_Equipment в таблице Specification_lines будет NULL.


Наверно все, что уже можно придумать в ТЗ к программе уже все описал...
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952043
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот второй раздел.
В поле наименование пишется имя раздела - остальные поля пустые
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952063
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AshoorupПод "авторским разделом" я понимаю раздел, который создал сам пользователь в своей спецификации (не каталоге). И занес в спецификацию, из каталога, то оборудование, которое посчитал нужным, даже если оно относится к другому разделу.

Вот есть например "Светофор" - это в разделе "Оборудование". И есть "Линза светофора" - это уже "Изделие и материалы".
Крайне редко может появится еще какой раздел (для заказчика) например "Мостовое оборудование" и тот же светофор пойдет в этот раздел.

Ну вот не получается четкой классификации. Все оборудование делится... ну пусть хоть на 10 разделов. Но подразделов все равно нет и не планируется. И классификации не планируется - это все только усложнит поиск и наполнение каталога - пользы никакой.

В спецификации пользователь еще должен иметь возможность добавлять запись не из каталога. Т.е. написать руками, заполнив все поля. Проблем тут не вижу. Просто поле ID_Equipment в таблице Specification_lines будет NULL.

Наверно все, что уже можно придумать в ТЗ к программе уже все описал...
Это вам так кажется. Пока отрывочно, неполно и противоречиво описана только небольшая часть. Но даже из уже описанного видно, что схема не годится.

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

Там, где вы не видите проблемы "написать ручками" на самом деле скрыта довольно тяжелая проблема. Либо написанное ручками нужно будет добавлять в общий каталог, помечая, что это - пользовательский ввод и он должен использоваться только в одной спецификации, либо опять-таки денормализовывать спецификацию и переписывать в нее кроме айди поля из каталога. Я бы сделал по первому сценарию.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952333
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"Утро вечера мудренее" (с)

Задумался над пользовательским вводом оборудования которого нет в каталоге. Думаю надо еще одна таблица User_eqipment_lines где будут храниться записи с пользовательским вводом. В таблице Specification_lines надо будет еще одно поле ID_user_eqipment_line таблицы User_eqipment_lines. Ну и получается так: если в таблице Specification_lines пустое значение в поле ID_Equipment, то читается значение из таблицы User_eqipment_lines.
Либо можно добавить поле User_eqipment в таблицу Eqipment_catalogue, помечая тем самым пользовательские записи (в поиск по каталогу они не должны попадать) - но мне кажется так сложнее потом будет организовать работу. Да и первый вариант как то не смешивает мух и котлеты.

Далее проблема с разделом в таблице Specification_lines. Думаю что нужно добавить поле ID_section и копировать значение из таблицы Eqipment_catalogue. Но значение это пользователь может менять (перетягивая в другой раздел), именно поэтому не должно быть четкой связи, а просто копирование значения.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952379
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ashoorup "Утро вечера мудренее" (с)

Задумался над пользовательским вводом оборудования которого нет в каталоге. Думаю надо еще одна таблица User_eqipment_lines где будут храниться записи с пользовательским вводом. В таблице Specification_lines надо будет еще одно поле ID_user_eqipment_line таблицы User_eqipment_lines. Ну и получается так: если в таблице Specification_lines пустое значение в поле ID_Equipment, то читается значение из таблицы User_eqipment_lines.
Либо можно добавить поле User_eqipment в таблицу Eqipment_catalogue, помечая тем самым пользовательские записи (в поиск по каталогу они не должны попадать) - но мне кажется так сложнее потом будет организовать работу. Да и первый вариант как то не смешивает мух и котлеты.

Далее проблема с разделом в таблице Specification_lines. Думаю что нужно добавить поле ID_section и копировать значение из таблицы Eqipment_catalogue. Но значение это пользователь может менять (перетягивая в другой раздел), именно поэтому не должно быть четкой связи, а просто копирование значения.
1. Делать отдельные таблицы, если данные в них похоже - настоятельно не рекомендуется. Загоняйте все в единую таблицу, помечайте признаком где пользовательский ввод, где - каталожный и в любом случае используйте айди одной (!) таблицы. Именно такой способ будет проще, а не с двумя таблицами.

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

Ну и дальше обсасывать голую схема и доводить ее до блеска смысла нету. Надо строить прототип или сразу приложение, тогда вы на своей шкуре прочувствуете, как играет то или иное решение. Работающий, полнофункциональный прототип можно экстремально быстро слепить на адп + мс скл сервер. (по этой схеме за 2-3 дня) Он может с успехом работать пока не торопясь пишется красивый клиент на студии.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952572
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
П-Л, спасибо за рекомендации! Вот что получилось:

Еще вопрос такой: У меня в таблице Equipment_catalogue есть поле Equipment_description, которое я планирую выводить отдельно например в RichTextBox (или др.). Задача такая, чтобы запись хранила форматированный текст. Какой тип у поля должен быть?
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952588
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл написать что сделал:
1. Добавил поле User_section в таблицу Sections - чтобы пометить разделы которые добавит пользователь (будет специальная кнопка для создания пользовательского раздела)
2. Добавил поле User_equipment в таблицу Equipment_catalogue - чтобы пометить записи добавляемые пользователем в спецификацию руками.
3. Добавил поле ID_section в таблицу Specification_lines - в это поле будет копироваться значение из Equipment_catalogue при добавлении оборудования в спецификацию. Пользователь неявно может менять значение этого поля.
Единственное меня смущает отсутствие связи этого поля с таблицей Sections. Если я правильно понимаю, то такая связь и называется "частичная денормализация"? Я так понимаю нужно сделать эту связь?
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952603
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MS SQL сервер не даст вам два раза связать поле ID_Section сильными связями. Если вы протянете связь от таблицы Specification_Lines до таблицы Sections то вторую связь надо делать без опции каскадного удаления или обновления. На схеме она будет пунктиром.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952650
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понял как это сделать...
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952684
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычным образом, как другие связи. Хватаете поле из таблицы Sections и тащите его мышкой в Specification_Lines, там бросаете. В окошке ставите галочки, какая связь.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952709
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это я понял. Я не не понял "вторую связь надо делать без опции каскадного удаления или обновления". Это надо поменять для "Спецификация INSERT и UPDATE" поля "Правило обновления" и "Правило удаления"? А на какие значения? (при любых пунктиром ничего не меняется)
SQL Server у меня RUS
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952746
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо снять каскадное обновление и каскадное удаление. Пишу по памяти, запустить сервер не могу. Пунктир может быть если снять контроль целостности, что-ли.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952827
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пунктир становится когда для связи выбираю "Включить использование ограничения внешнего ключа". На что это влияет не понимаю... да и разбираться уже как-то и времени нет. Если не сложно объясните для чего это делать и нужно ли.

Активно сажусь писать приложение. Курсовой сдача 04.06.2015 - времени не много. Благо на работе могу спокойно писать/учиться.
Для курсового надо показать хоть что-то. На производство программу я конечно же уже сделаю как надо.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952847
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот картинка как сделал. А что сделал не понял :)
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952864
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очередной учебный сферический конь в вакууме. Пишите...
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38952879
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я стараюсь :(
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38954217
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил перенести БД на рабочий сервер.
Писал базу в SQL Server 2014 Express а перенести решил на SQL Server 2012 EE. Данные вроде все перенеслись... жаль диаграмма не копируется. Связи тоже почему-то не скопировались.
Но вот фантастика. Открываю БД которая экспортировалась на сервер через Managment Studio от 2014 и вижу что почти все как было есть кроме связей. Даже примечания скопировались. Ну связи подцепить делов на пару минут, но знать как правильно не мешало бы.
Может есть какой более правильный способ скопировать диаграмму?
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38954267
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переносить всю базу надо бэкапом. А бэкап нельзя поднять с более новой версии на более старой.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38959148
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще такой вопрос. Мне надо хранить для одной записи от 1 до 3 картинок (ну накрайняк 2). Может я чего не знаю... одно поле хранит 1 картинку или можно как-то запихнуть туда несколько?
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38959157
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AshoorupЕще такой вопрос. Мне надо хранить для одной записи от 1 до 3 картинок (ну накрайняк 2). Может я чего не знаю... одно поле хранит 1 картинку или можно как-то запихнуть туда несколько?

Поле с типом image хранит бинарные данные - если Вы ему с клиента передадите 3 файла, "скленные" в один массив байтов, то СУБД не станет разбираться, сколько у Вас там картинок ;)
Другой вопрос что делать так не рекомендуют - вот, предположим, Вам надо удалить одну картинку из двух. Так Вы просто приравниваете соттветствующее поле NULL (или удаляете запись в подчиненной таблице "картинки"), а так Вам надо выкачать обратно на клиент весь этот "скленный" массив, разделить его и залить обратно.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38959170
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял. Спасибо!
Думаю в моем случае проще добавить еще одно поле Image2 и обходиться максимум двумя картинками.
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38959379
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AshoorupПонял. Спасибо!
Думаю в моем случае проще добавить еще одно поле Image2 и обходиться максимум двумя картинками.

Прочитай про 1-ую нормальную форму таблицы на досуге, когда замучаешься запросы писать...
...
Рейтинг: 0 / 0
Может лучше сделать все одной таблицей?
    #38978812
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думаю стоит отписаться о том, что курсовой защищен и на отлично. Всем спасибо за помощь! Отдельная благодарность П-Л за помощь и терпение :)
Следующий этап диплом... тема та-же но расширенная версия. А пока отпуск!
...
Рейтинг: 0 / 0
80 сообщений из 80, показаны все 4 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Может лучше сделать все одной таблицей?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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