Easyelectronics.ru

Электроника для всех
Текущее время: 18 окт 2019, 19:15

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 10:16 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 5891
Нужно спроектировать БД следующего вида:

Код:
A1  1B1  2B1  3B1  ...  mB1
A2  1B2  2B2  3B2  ...  mB2
A3  1B3  2B3  3B3  ...  mB3
.       .      .      .            .
.       .      .      .            .
.       .      .      .            .
An  1Bn  2Bn  3Bn  ...  mBn

где A -основной набор данных, а B -дополнительные.
Проблема в том, что n и m заранее неизвестны, дополнение данных идет и в сторону n, и в m.
Типы данных в каждом столбце одинаковы, но между столбцами - различны.

Писать придется на Access2000. (Плевки подтереть. Больше ничего не поставлено. Когда нет того, что любишь - любишь то, что есть.)

Как я понимаю, тут надо сделать несколько связанных таблиц. Но сколько их можно связать? - характерная величина n и m ожидается не менее нескольких тысяч.
Очень не хотелось бы посередине ввода данных (или ближе к концу,- по закону подлости) получить overflow или подобный отказ.

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

Помогите, плиз, правильно сконструировать исходную структуру. Что-то в терминах БД я никак ее представить себе не могу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 10:39 
Старожил

Зарегистрирован: 21 мар 2016, 01:19
Сообщения: 471
А тип связи записей какой? По некоему ID или запись к записи (ну то есть по номеру записи An)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 11:15 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 5891
Не определено. Это нужно решить, какой он должен быть, подходящий для этих условий.

Суть в том, что каждому A(i) принадлежит несколько "описателей" xB(i), причем для разных A их может быть разное и неизвестное заранее количество.


Последний раз редактировалось Кот495 05 июн 2019, 11:33, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 11:29 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
В реляционных СУБД обычно делают несколько таблиц, записи связываются через ID, который должен быть уникальным.
Основная таблица у вас будет A, вида:
Код:
Table A
ID (autoincrement, unique, primary key) | Key (ваш ключ, опционально) | Value (ваше значение)
1                                                          A1                                            XXX
2                                                          A2                                            XXX

Таблицы Bn создаются отдельно и привязываются так:
Код:
Table B
ID (autoincrement, unique, primary key) | Key (ваш ключ) | Value (ваше значение) | Parent (привязка к ID в A)
1                                                          1B1                    XXX                             1
2                                                          2B1                    XXX                             1
3                                                          1B2                    XXX                             2

Чтобы получить все значения mBn и значения A делаем такой SQL запрос:
SELECT B.key, B.value, A.value FROM B, A INNER JOIN ON B.Parent = A.ID

Опционально в конце WHERE A.ID = X для получения значений для конкретного A.

Как-то так, если не ошибаюсь (писал без проверки).

Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 11:32 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2622
Откуда: Санкт-Петербург
Выглядит, как две таблицы: одна пар (i,Ai), другая троек (i,j,iBj). Индексы и связь между таблицами, полагаю, понятны. Типовое решение.
Упс, уже расписали.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 11:34 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
Это очень часто используется у веб-сайтов. Например этот же форум в БД хранит много разных таблиц. Например таблицу Users, где у кажого пользователя есть уникальный ID. И например таблицу с постами всех юзеров. Где как минимум есть свой ID поста (опять же чтобы каждый пост можно было идентифицировать, ключ), а также привязка к ID юзера, который его запостил. И чтобы найти все посты юзера X, можно поискать по этому полю. А чтобы сформировать список постов с их авторами, делается запрос с JOIN, где табличка с постами соединяется с табличкой юзеров с помощью JOIN.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 11:35 
Старожил

Зарегистрирован: 21 мар 2016, 01:19
Сообщения: 471
Может так?
Отношение "1 ко многим"

PS собственно, это графическое представление предыдущего поста от Шторма

PPS Упс - я и не заметил, что в теме уже столько постов :(


Вложения:
2.jpg
2.jpg [ 53.75 Кб | Просмотров: 500 ]


Последний раз редактировалось ИгорР 05 июн 2019, 11:44, всего редактировалось 2 раз(а).
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 11:38 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 5891
NStorm, сорь, ваша таблица получилась неразборчивой из за малой ширины экрана у меня(((((((
Про запросы пока по-моему еще рано, я со структурой связей еще не разберусь никак((((((((

---------
Собственно, "описателем" является номер столбца. А содержание столбца - это битовые поля, показывающие, присутствует ли этот описатель для каждого элемента A(i), или нет.
Один описатель может присутствовать в нескольких A(i).

Вот, как такое сделать?

пример:
Код:
         det1   det2   det3
A1        -        +       -
A2        +       -        -
A3        +       -        +
A4        -        +       -
A5        +       +       -


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 11:50 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
Что-то теперь менее понятно стало. Нарисована обычная табличка теперь.
Цитата:
NStorm, сорь, ваша таблица получилась неразборчивой из за малой ширины экрана у меня(((((((

Уменьшите масштаб.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 11:54 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
Может это поможет: https://support.office.com/ru-ru/articl ... 6fb812b58f ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 11:59 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 5891
Пасиб, я изучу. А что еще почитать бы внятное про идеологию БД вообще? А то, ID, "по ключу", - не фтыкаю совершенно((((((
На Бейсике в два счета такой двумерный массив написал бы и всё сделал.
Но в БД как-то всё иначе...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 12:09 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
А чем таблица в БД отличается от двумерного массива? Не шибко-то и отличается.
ID, "по ключу" - индексы по сути.
Вообще полно книг и статей. Ключевое слово реляционные базы данных/СУБД. Вот, например, быстро нагугленная статейка: https://www.site-do.ru/db/db3.php
Вроде кратко и с картинками показывает, как строить связи между табличками.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 13:12 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2028
Откуда: Киев
Хм, Кот495 я наверно туплю, но что-то не очень догоню что вы хотите изобразить.
Каждая таблица в идеале должна представлять набор сущностей одного типа(строки) и их атрибуты (столбцы).
Ну типа TABLE_CARS может содержать столбцы TYPE (грузовик, легковая), MANUFACTURER (BMW, Mers), OWNER (Иванов, Петров). Ну и некий ключ который бы уникально определял нашу строку в таблице, можно конечно делать составной, но проще как указали выше просто индекс с автоинкрементом (1,2,3), что Access делать умеет.
Вот собственно глядя на вашу матрицу я не пойму что у вас сущность. Это A? а какие у нее параметры (столбцы) или только значение самого А?
Или 1B1 2B1 3B1 ... mB1 и есть параметры?
Если да, то вам нужно 3 таблицы:
OBJECTS
ID|NAME| - хранит данные про A
PARAMETERS_LIST
ID|NAME|TYPE| - хранит список имен 1B 2B 3B опций если они(или часть из них) одинаковы для сущностей.
PARAMETERS
ID|PARENT_ID|PARAMETER_ID|VALUE|
И данная таблица хранит конкретно параметры для А, где
PARENT_ID FK (foreign key) на OBJECTS;
PARAMETER_ID FK на PARAMETERS_LIST.

Доставать такие параметры джоином очень просто как уже отписали выше.

Если не планируется использовать сам Аксесс, а только движок вроде потянет, как с UI не уверен.
Насчет смены типа параметра, то такая схема его поддержит, но для всех сущностней где параметр используется, что может быть чревато. Может проще задать некий обобщенный тип, а уже непосредственно при вводе профилировать данные?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 13:57 
Старожил
Аватара пользователя

Зарегистрирован: 14 фев 2012, 19:11
Сообщения: 327
Откуда: Энергодар, Нижневартовск, Екатеринбург
Можно сделать обычное дерево. Каждая веточка - запись. Ветви могут иметь произвольное ветвление. Как на форуме. У каждой ветки есть свой id и id родителя, а также "тип записи". Родителей можете сделать сколько хотите - это, допустим, тип A. К каждому родителю прикрепить любое количество веток-записей типа B. Это как в форуме - темы и топики. Тем любое количество и топиков любое количество. Наполнять топики можно чем угодно (сообщения участников).
Такая структура в простейшем случае помещается в одной таблице.

_________________
git.io/vOZo0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 15:36 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 5891
Signaller, это не Вы тупите, а я не могу внятно сформулировать ТЗ. Не родная мне область эти БД...

Ну вот пример, скажем:
Код:
         грузовики легковые  самолеты покрышки микросхемы
склад A1    +         +         -         -         -
склад A2    -         -         +         -         -
склад A3    +         -         -         +         -
склад A4    -         +         -         +         -
склад A5    -         -         -         -         +
Запрос: определить, на каком складе находятся одновременно легковушки и покрышки.

Ассортимент неограничен: на складе A6 могут находиться резисторы, на складе A7 -арбузы... столбцы придется добавлять в процессе работы.
Понятнее?

NStorm, спасибо за ссылки, буду изучать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 16:06 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
Тогда можно так.
Табличка склады. 2 колонки -
1) ID склада (аналог индекса массива), который автоматом просто прописывается некий уникальный номер для идентификации. Он же "первичный ключ" (по ссылке написано что такое первичные ключи и для чего они).
2) Название склада. Какое-то нужно для вас значение.

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

Вторая табличка - инвентарь. 3 колонки.
1) ID. Первичный ключ. Пока можем не использовать даже, но как было сказано по сути - это индекс массива просто.
2) Наименование. Т.е. грузовики, легковые и т.д.
3) Склад. Тут ID склада, где это лежит.

Т.е. для вашего примера, эта таблица будет иметь вид:
Код:
ID | Наименование     | Склад
1  | Грузовик         | 1
2  | Легковая         | 1
3  | Самолет          | 2
4  | Грузовик         | 3
5  | Покрышка         | 3
...


Чтобы узнать, что лежит на складе A3 мы делаем запрос в псевдокоде:
ВЫБРАТЬ ID склада ИЗ таблицы "склады", у которого ИМЯ="А3", ОБЪЕДИНИТЬ РЕЗУЛЬТАТ С таблицей "Инвентарь" ПО ПРИЗНАКУ "инвентарь.Склад" = "склады.ID".
В результате получаете одну таблицу:
Код:
Склад.ID | Склад.Название | Инвентарь.ID | Инвентарь.Наименование | Инвентарь.Склад
3        | Склад А3       |  4           | Грузовик               | 3
3        | Склад А3       |  5           | Покрышка               | 3


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 16:15 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 5891
Я примерно так и делал, только сложнее: чтобы не записывать определитель многократно ("грузовик" на нескольких складах) вместо наименования был столбец индексов, которые ссылались на таблицу названий (грузовик - - микросхемы).
Но чё-то запутался, показалось, что Access так не работает((((((


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 16:19 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
Можно и так, как вы пишете. Я привет пример 2х-уровневой древовидной связи. Вы делали линейную связь через отдельную таблицу. Свои плюсы и минусы есть везде. У древовидной структуры уровни вложений не ограничены. Вдруг дальше придется добавить к "покрышкам" аттрибут какой-нибудь дополнительный - можно конечно поменять структуру таблицы, но так делать не очень хорошо по многим причинам. А можно добавить просто еще 3ий уровень.
Главное с индексами разберитесь. То, по чему ведется поиск и связь - должно быть индексом. Чтобы поиск не перебирал всю таблицу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 16:31 
Старожил

Зарегистрирован: 21 мар 2016, 01:19
Сообщения: 471
NStorm писал(а):
... То, по чему ведется поиск и связь - должно быть индексом. Чтобы поиск не перебирал всю таблицу.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 16:32 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 5891
Там еще "один-к-одному", "один-ко-многим", а "многие-ко-многим" - нету, хрен бы их подрал((((((
а связи должны быть двунаправленные, потому что "склады" первичны при вводе: смотрим, что на складу есть и разбрасываем по столбцам. Если нужного столбца еще нет - добавляем.
А поиск ведется наоборот - с конца к началу. Короче голову хорошо поломал, а потом Access глюкнул и запорол тестовую базу((((((((((


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 16:43 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
Так, как предложил я легко искать "в 2х направлениях".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 16:47 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2028
Откуда: Киев
NStorm +.
Кот495 вы конечно озвучили чётко какую СУБД хотите, но может все-таки подумать про другую тот же MYSQL.
ЕМНИП у аксеса есть лимит на файл 2 или 4 гиг. Так-что если планируется действительно много данных можна упереться в это ограничение. Да и слабенький он как по возможностям так и самому языку.

Касательно же того что вы хотите. Оттолкнитесь сначала от так называемой Объектной Модели. То есть начертить на листочке какие объекты/классы объектов вы должны хранить и как они взаимосвязаны. А также степень их детализации. Например если вам надо знать только имя хранимого на складе, то это все один класс Инвентарь. Если же надо ещё знать сколько дверей у легковушки, то возможно это отдельный класс и ему нужна своя таблица и тд. Тогда таблица инвентарь должна хранить связи, на другие таблицы. Сказал бы ещё UML в помощь, но то тоже не малый кусок работы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 19:04 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 5891
Кот495 писал(а):
а потом Access глюкнул и запорол тестовую базу((((((((((
восстановить не удалось - ни штатными средствами, ни нештатными. После этого я громко ругался и очень долго не хотел с ним иметь больше дела.
Но по независящим обстоятельствам ничего другого не нашлось, так что - или я хоть чё-нить работающее сделаю, или... не сделаю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 19:15 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 5891
NStorm писал(а):
У древовидной структуры уровни вложений не ограничены. Вдруг дальше придется добавить к "покрышкам" аттрибут какой-нибудь
Древовидная структура, как я понимаю, добавит атрибуты только в определенной ветви. На одном складу покрышка будет одна, на другом - другая, с аттрибутом. Это неправильно.
Описатель можно править - но он должен сменяться во всех точках одновременно, то есть везде где надо, лучше ставить ссылки на его единственное определение.
Думаю, что линейная связь будет проще и прозрачнее для разбора в случае "ручного" ремонта.

И, да, 2Гиг там наверно не будет. 10К*10К битовых полей - это не больше ста метров, имхо. А больше 10тыс записей там навряд наберется.
Но вот насвязывает ли Access столько - баальшой вопрос((((((((
Во всяком случае, впрямую количество столбцов ("по горизонтали") у него максимум 256 кажется, или даже меньше...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: подскажите про базу данных, плиз.
СообщениеДобавлено: 05 июн 2019, 19:22 
Старожил
Аватара пользователя

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2028
Откуда: Киев
Так вы что действительно хотите каждый раз добавлять столбцы в таблицу, типа alter table?
При таком подходе вы по сути будете перетряхивать всю БД.
Так не делают.

У меня не скромный вопрос, а матрица из старт поста это ваше понимание задачи или требование отображения данных начальства/заказчика?
По опыту могу сказать, очень много людей слишком привыкло к Excel, вот зачем например тут матричное отображение?
А что будет когда число колонок будет 1000, оно разве удобно так работать???
Конкретный пользовательский сценарий должна решать прикладная программа-оболочка, задача же базы данных максимально эффективное хранение и обработка данных.
Таким образом отображение данных != структура БД.

Цитата:
Описатель можно править - но он должен сменяться во всех точках одновременно, то есть везде, где надо, лучше ставить ссылки на его единственное определение.

Погуглите про объектно-ориентированные БД, там как раз смена/наследование атрибутов из каробки.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: STT


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB