powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Архитектура базы данных для хранения информации о разнородных объектах
25 сообщений из 57, страница 1 из 3
Архитектура базы данных для хранения информации о разнородных объектах
    #40001734
bratint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу придумать, как правильно организовать БД, в которой должна храниться информация об объектах разных типов, при этом у каждого типа свой набор атрибутов. Если точнее, то это электронные компоненты.
Для каждого из них указывается наименование, производитель, плюс к этому для некоторых типов указываются дополнительные характеристики, например:
для резисторов - сопротивление, единица измерения, допуск, номинальная мощность, температурный коэффициент, корпус
для керамических конденсаторов - ёмкость, единица измерения, допуск, номинальное напряжение, тип диэлектрика, корпус
для микросхем - тип и корпус.

Вопрос в том, как лучше организовать таблицы для хранения этих данных?
Я придумал 3 варианта, но ни один из них меня не устраивает.

1) Отдельная таблица для каждого типа
Резисторы (id, наименование, производитель, сопротивление, допуск, номинальная мощность, температурный коэффициент, корпус)
Конденсаторы (...)

Недостатки:
- Дублирование всех связанных таблиц
- Дублирование всех форм (или же придумывание сложных костылей)

2) Отдельные таблицы для типов + сводная таблица
Таблицы для типов такие же, как в п. 1, сводная таблица содержит имя таблицы типов и номер записи:
idИмя_таблицыНомер_записи1Резисторы12Конденсаторы1
Этот вариант мне кажется наиболее оптимальным, но:
- Не будет обеспечения целостности данных
- Невозможно в запросе задать имя таблицы, считав его из сводной таблицы. Единственный выход - формировать запросы в VBA.

3) Сводная таблица с неопределёнными атрибутами
idнаименованиепроизводительтипзначение1величина1значение2величина2атрибут1атрибут21RC0402JR-0722RLYageoрезистор22Ом62.5Вт04022CL31B102KBCNNNCSamsungконденсатор1000пФ50ВX7R12063AD9850BRSZAnalog DevicesмикросхемаDDSSSOP-28
Недостатки:
- Избыточные атрибуты
- Работа с данными сложнее, чем в случае таблиц со строго определёнными атрибутами; так же могут возникнуть затруднения, если потребуется модифицировать структуру таблицы
- Таблицы, связанные с атрибутами, будут содержать беспорядочный набор данных (в данном примере - таблица - источник значений атрибута "величина1" содержит единицы измерения и сопротивления, и ёмкости, а источник значений атрибута "атрибут1" - и тип диэлектрика конденсатора, и тип микросхемы).

Существуют ли более лучшие способы решения этой задачи? В т.ч. связанные с переходом на другую СУБД.
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40001759
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bratint,

Это EAV

Таблица Деталей + Таблица Параметров + Связующая таблица между ними
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40001766
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. сначала определите типы(Резисторы, Конденсаторы), наборы атрибутов (сопротивление, единица измерения, допуск, ёмкость, единица измерения, допуск, номинальное напряжение)-определяем тип этих данных, затем собираем набор шаблонов для резисторов это один набор, для конденсаторов - другой - это таблица наборов- это может быть EAV, может в отдельных таблицах.

2. создаете обычную таблицу из 3-х полей; полей точно должно быть больше-поставщик, дата поставки и пр поля. - но эти вопросы не рассматриваем.
id idнабор field1|field2|field31234555.345|6.4|200
заносите в неё данные, а что это за данные, что за наборы - определяете из таблицы шаблонов (в 3-м поле - массив данных)
Делаете обработку каждого атрибута и после этого вне зависимости от того из каких атрибутов состоит новый набор вы его с обработаете автоматически.
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40002577
bratint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы!
Посмотрел EAV - там, вроде бы, все значения хранятся в виде текста, или же создаются несколько "параллельных" полей для разных типов данных. Это не очень удобно.
Насколько понял, EAV - хороший подход, когда число типов и свойств практически неограничено, и может изменяться в течение времени. Но в данной задаче всё же довольно ограниченный набор типов, и у каждого из них - фиксированный набор свойств. Поэтому, как мне кажется, если использовать здесь модель EAV, то это неоправданно усложнит БД. Здесь даже получить из этих данных таблицу вида "Название резистора"-"Сопротивление"-"Вольтаж"-"Корпус" - уже проблема, у меня получилось это сделать только при помощи перекрестного запроса.

alecko
в 3-м поле - массив данных

Не очень понятно: в Акцессе же нет такого типа данных как массив, или имеется в виду массив, записанный в виде строки?


Может быть, существуют СУБД, поддерживающие метатаблицы как в варианте 2? Т.е. таблица, содержащая имена таблиц или ссылки/указатели на них, чтобы реализовать возможность обращения к нужной таблице без костылей в виде программной генерации кода запроса?

Появилась ещё одна идея: примерно такая сводная таблица компонентов:
idимятипсвойства_резисторысвойства_конденсаторысвойства_микросхемы1RC0402JR-0722RLрезистор92CL31B102KBCNNNCконденсатор53AD9850BRSZмикросхема1
Где значение атрибутов "свойства_..." - id записи в соответствующей таблице характеристик. Соответственно, для каждого типа - отдельная таблица с характеристиками. Недостаток - если всего будет N типов, то в сводной таблице у каждой записи будет N-1 неиспользуемых атрибутов.
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40002593
Фотография pureproft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот на этой странице один из многих вариантов. Локальный вариант бесплатен (minimono)
http://www.minimdb.com/download/index.html
Если разберётесь, то степеней свободы структур для хранения получите в избытке,
А клиентом для взаимодействия с пользователем может быть и Access
В дистрибутиве много примеров под разные языки.
Раньше была и русская документация,
и автор местный "ну я"
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40002657
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bratint
...Но в данной задаче всё же довольно ограниченный набор типов, и у каждого из них фиксированный набор свойств...
Все правильно:имеете таблицу с именем и типом детали\элемента(подвязывая её к справочнику типов) и со всеми возможными свойствами-на форме ввода\просмотра,в зависимости от типа(после обновления типа) отображаете нужные поля-в результате отсутствующие свойства-пустые\не отображаемые поля
Ведь общих свойств не так уж и мало:вес,размер,для большой группы мощность и т.д. Будет у Вас таблица с 50-70 полями-вполне приемлемо.
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40002675
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
набор параметров у резистора и транзистора настолько разный, что упихивать их в одну широченную таблицу так себе затея...имхо
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40002755
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я говорю вообще о решении подобных задач: тип-подтип-подподтип - таблицы по количеству подподтипов и контейнер с подчиненной формой содержимое которого заменяется в соответствии с выбором типа и подтипа в главной форме или древовидная структура в одной части формы с отображением/возможностью добавления соответствующей подчиненной в другой её части(контейнере подчиненной)
Довольно часто применяемый подход.
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40002936
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
Я говорю вообще о решении подобных задач: тип-подтип-подподтип - таблицы по количеству подподтипов и контейнер с подчиненной формой содержимое которого заменяется в соответствии с выбором типа и подтипа в главной форме или древовидная структура в одной части формы с отображением/возможностью добавления соответствующей подчиненной в другой её части(контейнере подчиненной)
Довольно часто применяемый подход.

Не...я не про коней в вакууме , я про резистор-транзистор.
Если форма не генерится динамически на основании неких метаданных, то попытки унифицировать форму под резистор-транзистор, так себе затея
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40002940
bratint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pureproft
вот на этой странице один из многих вариантов. Локальный вариант бесплатен (minimono)
http://www.minimdb.com/download/index.html

Насколько понял, там все типы данных реализованы через строки, а это не есть здорово с точки зрения размера базы и быстродействия.

sdku
Все правильно:имеете таблицу с именем и типом детали\элемента(подвязывая её к справочнику типов) и со всеми возможными свойствами-на форме ввода\просмотра,в зависимости от типа(после обновления типа) отображаете нужные поля-в результате отсутствующие свойства-пустые\не отображаемые поля
Ведь общих свойств не так уж и мало:вес,размер,для большой группы мощность и т.д. Будет у Вас таблица с 50-70 полями-вполне приемлемо.

Тоже вариант, но здесь не очень хорошо то, что для всех записей в этой таблице будет множество "лишних" пустых полей. И ещё некоторые поля, по-видимому, необходимо будет продублировать. Например, у резисторов и у микросхем совершенно разные типы корпусов, поэтому потребуются столбцы Корпус_резистор и Корпус_микросхема (или же сделать один столбец Корпус, но перечислить все возможные корпуса для всех типов в одной связанной таблице, что тоже не очень хорошо). Или количество: у электронных компонентов количество целое, у проводов - действительное (длина).
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40002943
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 тс
Сколько реально типов элементов в тз?
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40002947
Фотография pureproft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bratint,

Кстати вы нигде не упоминали про объёмы информации или я пропустил.
А то иногда можно часами что то про базы и оптимизацию писать а выясняется что она вся в память нетбука помещается.

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

Есть и другие, в смысле не М, но мы в форуме access там есть Dll или ActiveX и примеры для vbs.

В моём представлении MiniMono это такой SqLite для деревьев, только не открытый, но бесплатный и автор доступен для диалога.
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40002969
bratint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubucha
Сколько реально типов элементов в тз?

Точно это количество не обговорено (оно должно определиться в процессе), но примерно около 30.

pureproft
Кстати вы нигде не упоминали про объёмы информации или я пропустил.
А то иногда можно часами что то про базы и оптимизацию писать а выясняется что она вся в память нетбука помещается.

Кстати, да - объёмы сравнительно небольшие, порядка нескольких десятков тысяч записей.

pureproft
Есть и другие, в смысле не М

А какие?
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40002978
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bratint
Но в данной задаче всё же довольно ограниченный набор типов, и у каждого из них - фиксированный набор свойств.


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

Может как всегда не в тему, ибо как обычно прочитал наискосок
Но наивно предположу, что чем то и поможет сей примерчик.
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40002988
Фотография Лапух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин белинский, уже и забыл, что сей форум на столько несовершеннен , что больше 1-го вложения нельзя за раз приложить.
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40002996
Фотография pureproft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bratint
bubucha
Сколько реально типов элементов в тз?

Точно это количество не обговорено (оно должно определиться в процессе), но примерно около 30.

pureproft
Кстати вы нигде не упоминали про объёмы информации или я пропустил.
А то иногда можно часами что то про базы и оптимизацию писать а выясняется что она вся в память нетбука помещается.

Кстати, да - объёмы сравнительно небольшие, порядка нескольких десятков тысяч записей.

pureproft
Есть и другие, в смысле не М

А какие?


Это как раз тот случай (" ...порядка нескольких десятков тысяч записей... "), когда абсолютно не важно какой инструмент брать в руки. Но на вопрос - как хранить, можно ответить после вопроса - что потом планируется с накопленными данными делать.
Т.е. с какими запросами (и я сейчас не про SQL, а про простой житейский) к за данными будут обращаться.

p.s. Давно я не брал в руки "шашек", это я к тому, что если вам не сложно публично по обсуждать дальнейший процесс, мне интересно по участвовать.
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40003001
Фотография pureproft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pureproft

Т.е. с какими запросами (и я сейчас не про SQL, а про простой житейский) за данными будут обращаться.


И обращаться будет один человек локально или больше одного и не локально?
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40003002
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag
и практика показывает что большинство из этих свойств будут не востребованы по причине того, что не найдут ни одного идиота, который согласится все это заполнять, все это закончится заведением двух-трех параметров типа вольтаж, емкость, сопротивление, ток, индуктивность и материал изготовления... когда-то делал аналогичную бд по учету компов, мониторов, принтеров и т.д. - были грандиозные масштабы учета (от процессора на мамке, до количества страниц печати за минуту) все закончилось банально: тип устройства, производитель, инв. номер и ответственный, остальные пол сотни планируемых параметров по сей день никому не нужны...

Совершенно в точку.
90% полей заполнять не будут (дураков нет)
Проходил это по молодости неоднократно(хотелось как лучше - получилось как всегда)
Ну а если сильно хочется, то EAV или его модификации.
Тут на SQL.RU это всплывает часто (холивар на эту тему, ну и дым столбом)
ищите Тенцер EAV древовидные структуры сборки и тд.)
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40003003
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROI,

vmag это советы не тебе
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40003007
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bratint
Посмотрел EAV - там, вроде бы, все значения хранятся в виде текста, или же создаются несколько "параллельных" полей для разных типов данных. Это не очень удобно.

сложить в json и пихнуть в одно длинное текстовое поле
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40003023
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77
bratint
Посмотрел EAV - там, вроде бы, все значения хранятся в виде текста, или же создаются несколько "параллельных" полей для разных типов данных. Это не очень удобно.

сложить в json и пихнуть в одно длинное текстовое поле

+
Или в Ексель на разные листы
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40003024
bratint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лапух
Может как всегда не в тему, ибо как обычно прочитал наискосок
Но наивно предположу, что чем то и поможет сей примерчик.

Спасибо за пример! Я уже, по советам участников, попробовал реализовать что-то типа-этого, но здесь 2 проблемы: сравнительно сложно получить таблицу вида "Название резистора"-"Сопротивление"-"Вольтаж"-"Корпус" (и её нельзя редактировать), а также все значения в текстовом виде, что затрудняет их сравнение между собой / операции с ними.

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

Ну, здесь есть одна особенность: у большинства пассивных компонентов все эти свойства зашифрованы в названии, так что их не прийдётся вручную забивать.

pureproft
Т.е. с какими запросами (и я сейчас не про SQL, а про простой житейский) к за данными будут обращаться.

В первую очередь - найти все подходящие компоненты, например, все конденсаторы с определённым типом корпуса, ёмкостью от 200 до 300 пФ и напряжением не меньше 50 В, посмотреть их наличие.

pureproft
И обращаться будет один человек локально или больше одного и не локально?

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

ROI
ищите Тенцер EAV древовидные структуры сборки и тд.)
17-77
сложить в json и пихнуть в одно длинное текстовое поле

Спасибо за советы, буду смотреть.
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40003031
bratint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pureproft
Т.е. с какими запросами (и я сейчас не про SQL, а про простой житейский) к за данными будут обращаться.

Кстати, и ещё: там используют САПР, которая должна брать информацию из этой БД. А для этого нужно, чтобы таблицы компонентов в БД имели определённую структуру, именно вида "наименование"-"номинал"-"корпус"-..., и чтобы атрибуты имели соответствующий тип данных.
...
Рейтинг: 0 / 0
Архитектура базы данных для хранения информации о разнородных объектах
    #40003039
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag

и практика показывает что большинство из этих свойств будут не востребованы по причине того, что не найдут ни одного идиота, который согласится все это заполнять, все это закончится заведением двух-трех параметров типа вольтаж, емкость, сопротивление, ток, индуктивность и материал изготовления... когда-то делал аналогичную бд по учету компов, мониторов, принтеров и т.д. - были грандиозные масштабы учета (от процессора на мамке, до количества страниц печати за минуту) все закончилось банально: тип устройства, производитель, инв. номер и ответственный, остальные пол сотни планируемых параметров по сей день никому не нужны...
+100500
Иначе примерно так:(если найдете "идиота, который согласится все это заполнять" . О быстродействии и т.п. при "мощности" современных компьютеров,даже бюджетных,беспокоится,думаю,не стоит)
Да и по большому счету "Все уже сделано до нас" и необходимости в очередном "изобретении велосипеда" нет никакой-есть интернет-лучше подумайте как открыть нужный сайт\страницу.(самый простой вариант свойство гиперссылка)
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 1 из 3
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Архитектура базы данных для хранения информации о разнородных объектах
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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