|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
Не могу придумать, как правильно организовать БД, в которой должна храниться информация об объектах разных типов, при этом у каждого типа свой набор атрибутов. Если точнее, то это электронные компоненты. Для каждого из них указывается наименование, производитель, плюс к этому для некоторых типов указываются дополнительные характеристики, например: для резисторов - сопротивление, единица измерения, допуск, номинальная мощность, температурный коэффициент, корпус для керамических конденсаторов - ёмкость, единица измерения, допуск, номинальное напряжение, тип диэлектрика, корпус для микросхем - тип и корпус. Вопрос в том, как лучше организовать таблицы для хранения этих данных? Я придумал 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" - и тип диэлектрика конденсатора, и тип микросхемы). Существуют ли более лучшие способы решения этой задачи? В т.ч. связанные с переходом на другую СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 16:06 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
bratint, Это EAV Таблица Деталей + Таблица Параметров + Связующая таблица между ними ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 16:59 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
1. сначала определите типы(Резисторы, Конденсаторы), наборы атрибутов (сопротивление, единица измерения, допуск, ёмкость, единица измерения, допуск, номинальное напряжение)-определяем тип этих данных, затем собираем набор шаблонов для резисторов это один набор, для конденсаторов - другой - это таблица наборов- это может быть EAV, может в отдельных таблицах. 2. создаете обычную таблицу из 3-х полей; полей точно должно быть больше-поставщик, дата поставки и пр поля. - но эти вопросы не рассматриваем. id idнабор field1|field2|field31234555.345|6.4|200 заносите в неё данные, а что это за данные, что за наборы - определяете из таблицы шаблонов (в 3-м поле - массив данных) Делаете обработку каждого атрибута и после этого вне зависимости от того из каких атрибутов состоит новый набор вы его с обработаете автоматически. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 17:26 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
Спасибо за ответы! Посмотрел EAV - там, вроде бы, все значения хранятся в виде текста, или же создаются несколько "параллельных" полей для разных типов данных. Это не очень удобно. Насколько понял, EAV - хороший подход, когда число типов и свойств практически неограничено, и может изменяться в течение времени. Но в данной задаче всё же довольно ограниченный набор типов, и у каждого из них - фиксированный набор свойств. Поэтому, как мне кажется, если использовать здесь модель EAV, то это неоправданно усложнит БД. Здесь даже получить из этих данных таблицу вида "Название резистора"-"Сопротивление"-"Вольтаж"-"Корпус" - уже проблема, у меня получилось это сделать только при помощи перекрестного запроса. alecko в 3-м поле - массив данных Не очень понятно: в Акцессе же нет такого типа данных как массив, или имеется в виду массив, записанный в виде строки? Может быть, существуют СУБД, поддерживающие метатаблицы как в варианте 2? Т.е. таблица, содержащая имена таблиц или ссылки/указатели на них, чтобы реализовать возможность обращения к нужной таблице без костылей в виде программной генерации кода запроса? Появилась ещё одна идея: примерно такая сводная таблица компонентов: idимятипсвойства_резисторысвойства_конденсаторысвойства_микросхемы1RC0402JR-0722RLрезистор92CL31B102KBCNNNCконденсатор53AD9850BRSZмикросхема1 Где значение атрибутов "свойства_..." - id записи в соответствующей таблице характеристик. Соответственно, для каждого типа - отдельная таблица с характеристиками. Недостаток - если всего будет N типов, то в сводной таблице у каждой записи будет N-1 неиспользуемых атрибутов. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 15:34 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
вот на этой странице один из многих вариантов. Локальный вариант бесплатен (minimono) http://www.minimdb.com/download/index.html Если разберётесь, то степеней свободы структур для хранения получите в избытке, А клиентом для взаимодействия с пользователем может быть и Access В дистрибутиве много примеров под разные языки. Раньше была и русская документация, и автор местный "ну я" ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 15:59 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
bratint ...Но в данной задаче всё же довольно ограниченный набор типов, и у каждого из них фиксированный набор свойств... Ведь общих свойств не так уж и мало:вес,размер,для большой группы мощность и т.д. Будет у Вас таблица с 50-70 полями-вполне приемлемо. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 19:13 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
набор параметров у резистора и транзистора настолько разный, что упихивать их в одну широченную таблицу так себе затея...имхо ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 20:29 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
Я говорю вообще о решении подобных задач: тип-подтип-подподтип - таблицы по количеству подподтипов и контейнер с подчиненной формой содержимое которого заменяется в соответствии с выбором типа и подтипа в главной форме или древовидная структура в одной части формы с отображением/возможностью добавления соответствующей подчиненной в другой её части(контейнере подчиненной) Довольно часто применяемый подход. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 02:49 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
sdku Я говорю вообще о решении подобных задач: тип-подтип-подподтип - таблицы по количеству подподтипов и контейнер с подчиненной формой содержимое которого заменяется в соответствии с выбором типа и подтипа в главной форме или древовидная структура в одной части формы с отображением/возможностью добавления соответствующей подчиненной в другой её части(контейнере подчиненной) Довольно часто применяемый подход. Не...я не про коней в вакууме , я про резистор-транзистор. Если форма не генерится динамически на основании неких метаданных, то попытки унифицировать форму под резистор-транзистор, так себе затея ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 19:43 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
pureproft вот на этой странице один из многих вариантов. Локальный вариант бесплатен (minimono) http://www.minimdb.com/download/index.html Насколько понял, там все типы данных реализованы через строки, а это не есть здорово с точки зрения размера базы и быстродействия. sdku Все правильно:имеете таблицу с именем и типом детали\элемента(подвязывая её к справочнику типов) и со всеми возможными свойствами-на форме ввода\просмотра,в зависимости от типа(после обновления типа) отображаете нужные поля-в результате отсутствующие свойства-пустые\не отображаемые поля Ведь общих свойств не так уж и мало:вес,размер,для большой группы мощность и т.д. Будет у Вас таблица с 50-70 полями-вполне приемлемо. Тоже вариант, но здесь не очень хорошо то, что для всех записей в этой таблице будет множество "лишних" пустых полей. И ещё некоторые поля, по-видимому, необходимо будет продублировать. Например, у резисторов и у микросхем совершенно разные типы корпусов, поэтому потребуются столбцы Корпус_резистор и Корпус_микросхема (или же сделать один столбец Корпус, но перечислить все возможные корпуса для всех типов в одной связанной таблице, что тоже не очень хорошо). Или количество: у электронных компонентов количество целое, у проводов - действительное (длина). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 20:07 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
2 тс Сколько реально типов элементов в тз? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 20:20 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
bratint, Кстати вы нигде не упоминали про объёмы информации или я пропустил. А то иногда можно часами что то про базы и оптимизацию писать а выясняется что она вся в память нетбука помещается. По поводу MiniMono строк и цифр, за пол века в М системах настолько отработана работа с форматами хранения чисел и которые как бы строки но как бы нет, что могут и по соревноваться в арифметике. Там проблема в перестройке мозга в абстракции хранения деревьев, но если удастся будете при каждом иерархическом проекте возвращаться. Есть и другие, в смысле не М, но мы в форуме access там есть Dll или ActiveX и примеры для vbs. В моём представлении MiniMono это такой SqLite для деревьев, только не открытый, но бесплатный и автор доступен для диалога. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 20:39 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
bubucha Сколько реально типов элементов в тз? Точно это количество не обговорено (оно должно определиться в процессе), но примерно около 30. pureproft Кстати вы нигде не упоминали про объёмы информации или я пропустил. А то иногда можно часами что то про базы и оптимизацию писать а выясняется что она вся в память нетбука помещается. Кстати, да - объёмы сравнительно небольшие, порядка нескольких десятков тысяч записей. pureproft Есть и другие, в смысле не М А какие? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 23:24 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
bratint Но в данной задаче всё же довольно ограниченный набор типов, и у каждого из них - фиксированный набор свойств. и практика показывает что большинство из этих свойств будут не востребованы по причине того, что не найдут ни одного идиота, который согласится все это заполнять, все это закончится заведением двух-трех параметров типа вольтаж, емкость, сопротивление, ток, индуктивность и материал изготовления... когда-то делал аналогичную бд по учету компов, мониторов, принтеров и т.д. - были грандиозные масштабы учета (от процессора на мамке, до количества страниц печати за минуту) все закончилось банально: тип устройства, производитель, инв. номер и ответственный, остальные пол сотни планируемых параметров по сей день никому не нужны... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 00:58 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
bratint, Может как всегда не в тему, ибо как обычно прочитал наискосок Но наивно предположу, что чем то и поможет сей примерчик. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 03:34 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
Блин белинский, уже и забыл, что сей форум на столько несовершеннен , что больше 1-го вложения нельзя за раз приложить. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 03:36 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
bratint bubucha Сколько реально типов элементов в тз? Точно это количество не обговорено (оно должно определиться в процессе), но примерно около 30. pureproft Кстати вы нигде не упоминали про объёмы информации или я пропустил. А то иногда можно часами что то про базы и оптимизацию писать а выясняется что она вся в память нетбука помещается. Кстати, да - объёмы сравнительно небольшие, порядка нескольких десятков тысяч записей. pureproft Есть и другие, в смысле не М А какие? Это как раз тот случай (" ...порядка нескольких десятков тысяч записей... "), когда абсолютно не важно какой инструмент брать в руки. Но на вопрос - как хранить, можно ответить после вопроса - что потом планируется с накопленными данными делать. Т.е. с какими запросами (и я сейчас не про SQL, а про простой житейский) к за данными будут обращаться. p.s. Давно я не брал в руки "шашек", это я к тому, что если вам не сложно публично по обсуждать дальнейший процесс, мне интересно по участвовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 07:04 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
pureproft Т.е. с какими запросами (и я сейчас не про SQL, а про простой житейский) за данными будут обращаться. И обращаться будет один человек локально или больше одного и не локально? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 08:38 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
vmag и практика показывает что большинство из этих свойств будут не востребованы по причине того, что не найдут ни одного идиота, который согласится все это заполнять, все это закончится заведением двух-трех параметров типа вольтаж, емкость, сопротивление, ток, индуктивность и материал изготовления... когда-то делал аналогичную бд по учету компов, мониторов, принтеров и т.д. - были грандиозные масштабы учета (от процессора на мамке, до количества страниц печати за минуту) все закончилось банально: тип устройства, производитель, инв. номер и ответственный, остальные пол сотни планируемых параметров по сей день никому не нужны... Совершенно в точку. 90% полей заполнять не будут (дураков нет) Проходил это по молодости неоднократно(хотелось как лучше - получилось как всегда) Ну а если сильно хочется, то EAV или его модификации. Тут на SQL.RU это всплывает часто (холивар на эту тему, ну и дым столбом) ищите Тенцер EAV древовидные структуры сборки и тд.) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 08:40 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
ROI, vmag это советы не тебе ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 08:41 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
bratint Посмотрел EAV - там, вроде бы, все значения хранятся в виде текста, или же создаются несколько "параллельных" полей для разных типов данных. Это не очень удобно. сложить в json и пихнуть в одно длинное текстовое поле ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 09:50 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
17-77 bratint Посмотрел EAV - там, вроде бы, все значения хранятся в виде текста, или же создаются несколько "параллельных" полей для разных типов данных. Это не очень удобно. сложить в json и пихнуть в одно длинное текстовое поле + Или в Ексель на разные листы ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 11:53 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
Лапух Может как всегда не в тему, ибо как обычно прочитал наискосок Но наивно предположу, что чем то и поможет сей примерчик. Спасибо за пример! Я уже, по советам участников, попробовал реализовать что-то типа-этого, но здесь 2 проблемы: сравнительно сложно получить таблицу вида "Название резистора"-"Сопротивление"-"Вольтаж"-"Корпус" (и её нельзя редактировать), а также все значения в текстовом виде, что затрудняет их сравнение между собой / операции с ними. vmag и практика показывает что большинство из этих свойств будут не востребованы по причине того, что не найдут ни одного идиота, который согласится все это заполнять, все это закончится заведением двух-трех параметров типа вольтаж, емкость, сопротивление, ток, индуктивность и материал изготовления... Ну, здесь есть одна особенность: у большинства пассивных компонентов все эти свойства зашифрованы в названии, так что их не прийдётся вручную забивать. pureproft Т.е. с какими запросами (и я сейчас не про SQL, а про простой житейский) к за данными будут обращаться. В первую очередь - найти все подходящие компоненты, например, все конденсаторы с определённым типом корпуса, ёмкостью от 200 до 300 пФ и напряжением не меньше 50 В, посмотреть их наличие. pureproft И обращаться будет один человек локально или больше одного и не локально? В первом приближении - один, локально. В перспективе потребуется возможность доступа к БД всех пользователей локальной сети. Но это, конечно, будет уже не в Акцессе, просто сейчас хотелось бы с архитектурой базы разобраться, чтобы потом на грабли не наступать. ROI ищите Тенцер EAV древовидные структуры сборки и тд.) 17-77 сложить в json и пихнуть в одно длинное текстовое поле Спасибо за советы, буду смотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 11:55 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
pureproft Т.е. с какими запросами (и я сейчас не про SQL, а про простой житейский) к за данными будут обращаться. Кстати, и ещё: там используют САПР, которая должна брать информацию из этой БД. А для этого нужно, чтобы таблицы компонентов в БД имели определённую структуру, именно вида "наименование"-"номинал"-"корпус"-..., и чтобы атрибуты имели соответствующий тип данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 12:07 |
|
Архитектура базы данных для хранения информации о разнородных объектах
|
|||
---|---|---|---|
#18+
vmag и практика показывает что большинство из этих свойств будут не востребованы по причине того, что не найдут ни одного идиота, который согласится все это заполнять, все это закончится заведением двух-трех параметров типа вольтаж, емкость, сопротивление, ток, индуктивность и материал изготовления... когда-то делал аналогичную бд по учету компов, мониторов, принтеров и т.д. - были грандиозные масштабы учета (от процессора на мамке, до количества страниц печати за минуту) все закончилось банально: тип устройства, производитель, инв. номер и ответственный, остальные пол сотни планируемых параметров по сей день никому не нужны... Иначе примерно так:(если найдете "идиота, который согласится все это заполнять" . О быстродействии и т.п. при "мощности" современных компьютеров,даже бюджетных,беспокоится,думаю,не стоит) Да и по большому счету "Все уже сделано до нас" и необходимости в очередном "изобретении велосипеда" нет никакой-есть интернет-лучше подумайте как открыть нужный сайт\страницу.(самый простой вариант свойство гиперссылка) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 12:58 |
|
|
start [/forum/topic.php?fid=45&fpage=13&tid=1609921]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
88ms |
get tp. blocked users: |
2ms |
others: | 301ms |
total: | 480ms |
0 / 0 |