Easyelectronics.ru

Электроника для всех
Текущее время: 23 авг 2019, 01:30

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



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

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

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

Код:
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
Сообщения: 408
А тип связи записей какой? По некоему ID или запись к записи (ну то есть по номеру записи An)?


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

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

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


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

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

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2135
В реляционных СУБД обычно делают несколько таблиц, записи связываются через 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
Сообщения: 2614
Откуда: Санкт-Петербург
Выглядит, как две таблицы: одна пар (i,Ai), другая троек (i,j,iBj). Индексы и связь между таблицами, полагаю, понятны. Типовое решение.
Упс, уже расписали.


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

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


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

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

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

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


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


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

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

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

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

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


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

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

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


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

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


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

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


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

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


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

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2013
Откуда: Киев
Хм, Кот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
Сообщения: 5572
Signaller, это не Вы тупите, а я не могу внятно сформулировать ТЗ. Не родная мне область эти БД...

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

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

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


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

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2135
Тогда можно так.
Табличка склады. 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
Сообщения: 5572
Я примерно так и делал, только сложнее: чтобы не записывать определитель многократно ("грузовик" на нескольких складах) вместо наименования был столбец индексов, которые ссылались на таблицу названий (грузовик - - микросхемы).
Но чё-то запутался, показалось, что Access так не работает((((((


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

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


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

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

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


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

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


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

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


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

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

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


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

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


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

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

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


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

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

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

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

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


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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

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