Easyelectronics.ru

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

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



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

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

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

Все мои схемы в этой теме - это лично мои неуклюжие попытки донести суть дела до общественности))))))))


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

Зарегистрирован: 13 дек 2010, 23:15
Сообщения: 2028
Откуда: Киев
Кот495 я не на столько разбираюсь в потрохах БД, но согласно вашего поста:
Цитата:
Запрос: определить, на каком складе находятся одновременно легковушки и покрышки.

Вам не интересно знать как я понимаю, что на этом складе нет самолетов. Тогда какой смысл (если оперировать таблицей как массивом) выделять память под самолеты?
Вопрос к вам, это насколько детализированная информация про объекты склада вам нужна.
Например, если только наличие на складе А1 объекта с именем покрышка, то делайте как советовали выше Родительская таблица Склад, и дочерняя Инвентарь ( как советовал NStorm).
Другое дело, если ваш "склад", должен знать не только что у него лежит, но и что должно лежать.
Типа на каждом складе должен быть грузовик, покрышка, фонарик и тд.
И тут снова вопрос, список одинаковый для всех складов или нет?
Если да, то 1 таблица в принципе решает, хотя наверно гуру БД строения сказали бы что это не совсем хорошо.
Если же каждый склад имеет свой уникальный набор колонок, то стоить завести еще таблицу:
- список инвентаря - просто список всех возможных уникальных "столбцов" для всех складов:
Тогда Инвентарь - можно представить, как:
|ID| Warehouse_id|Inventory_list_id|Exists (y/n)|

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


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

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
Кот495 писал(а):
как я понимаю, добавит атрибуты только в определенной ветви. На одном складу покрышка будет одна, на другом - другая, с аттрибутом. Это неправильно.

Это норма. Просто запрос SQL составляется так, что если нет доп. атрибута - то и поле будет NULL и всё. Если я сейчас по памяти не путаю, то это называется LEFT JOIN в терминах SQL просто. Задумайтесь - эти JOIN'ы, о которых я говорю и картинку показывал не просто так в SQL придумали. Это типовая операция - объединять результат из разных таблиц. Добавляется что-то новое - лучше сделайте новую таблицу и свяжите её с текущими. Это общепринятая практика.

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

А вот так как раз неправильно. Потому что меняя кол-во атрибутов (столбцов) в уже рабочей таблице вы, как уже сказали "перетряхиваете" всю таблицу - СУБД придется её полностью перестраивать. Плюс может сломаться запрос, если где-то не будет учитываться то, что столбцы могут добавиться.

Цитата:
Не вижу другого способа добавить еще не существующий описатель.

Добавляете новую таблицу и связываете с нужной, как я сказал в 1ом абзаце.

И если уж стал вопрос про что-нибудь аксесса - может глянете в сторону MySQL? https://habr.com/ru/post/142385/


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

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
Вот как с атрибутами можно: http://www.sqlfiddle.com/#!9/5c31ef7/1
Вложение:
sql-test2.png
sql-test2.png [ 21.49 Кб | Просмотров: 238 ]


Один запрос:
Код:
SELECT Warehouses.Name AS "Название склада", Inventory.Name AS "Название инвентаря",
       Attrs.Name AS "Название атрибута", Attrs.Value AS "Значение атрибута"
FROM Warehouses
INNER JOIN Inventory ON Inventory.Warehouse_ID = Warehouses.ID
LEFT JOIN Attrs ON Attrs.Inventory_ID = Inventory.ID
WHERE Warehouses.Name = "Склад А" OR Warehouses.Name = "Склад В";


И создание таблиц всех:
Код:
CREATE TABLE Warehouses
    (`ID` int unsigned NOT NULL AUTO_INCREMENT, `Name` varchar(100),
    PRIMARY KEY (`ID`));
   
INSERT INTO Warehouses
    (`ID`, `Name`)
VALUES
    (1, 'Склад А'),
    (2, 'Склад Б'),
    (3, 'Склад В');

CREATE TABLE Inventory
    (`ID` int unsigned NOT NULL AUTO_INCREMENT, `Name` varchar(50), `Warehouse_ID` int unsigned,
    PRIMARY KEY (`ID`));
INSERT INTO Inventory
    (`ID`, `Name`, `Warehouse_ID`)
VALUES
    (1, 'Грузовик', 1),
    (2, 'Легковая', 1),
    (3, 'Самолет', 2),
    (4, 'Грузовик', 3),
    (5, 'Покрышка', 3);

CREATE TABLE Attrs
    (`ID` int unsigned NOT NULL AUTO_INCREMENT, `Name` varchar(50), `Value` varchar(50), `Inventory_ID` int unsigned,
    PRIMARY KEY (`ID`));
INSERT INTO Attrs
    (`ID`, `Name`, `Value`, `Inventory_ID`)
VALUES
    (1, 'Модель грузовика', 'Игрушечный камазик', 4),
    (2, 'Двигатель грузовика', 'Ручной привод', 4);


Последний раз редактировалось NStorm 05 июн 2019, 23:06, всего редактировалось 1 раз.

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

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
Запросом мы показываем весь инвентарь на складе А и В. Плюс все атрибуты, если они есть. При этом у каждого предмета на складе может быть сколько угодно атрибутов. Мы их связываем через Inventory_ID. LEFT JOIN будет выдавать по строчке для каждого атрибута. Мы уже потом когда разбираем данные, понимаем, что это 2 разных атрибута у одного и того же грузовика со "Склада В". При этом у грузовика со "Склада А" атрибутов нет вообще.

Если надо именно на SQL выводить этот грузовик с 2 атрибутами 1 строчку именно, то это можно сделать вложенными запросами я думаю. Как-то примерно, как тут: https://stackoverflow.com/questions/204 ... -first-row
Но эти детали расписывать уже лень.


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

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

NStorm писал(а):
Добавляете новую таблицу и связываете с нужной, как я сказал в 1ом абзаце.
Ну я ж уже написал)))) Мои экзерсисы к этому и приводили: получалось три таблицы: "склады", "товары" и таблица ссылок, связывающая их.

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


Последний раз редактировалось Кот495 05 июн 2019, 21:59, всего редактировалось 1 раз.

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

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
Это SQL. Конкретный пример для MySQL, но в Access тоже должен быть какой-то SQL афаик.

Цитата:
А как ее НЕ выделять?
Актуальных столбцов у каждой записи разное количество. Если исключить пустые поля, прямоугольный порядок разрушится. Как тогда искать-то?

Ну ёлки, вам же столько примеров уже привели и нарисовали.


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

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 5891
Сожалею, тёмен я в базах данных, мало понял. Вот покурю учебники - надеюсь буду понимать больше...

И еще просьба: где бы качнуть учебный курс по Access2000 С. Робинсона? На эту книгу все ссылаются. Абсолютно все, в списке литературы в любом учебнике она указана. Но пдфку нигде найти не удалось пока(((((((


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

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2622
Откуда: Санкт-Петербург
Кот495, в реляционных базах логика другая, надо в неё въехать, а потом уже думать, как на неё положить свои данные.
Нет никаких массивов - ни двумерных, ни даже одномерных. Есть множества записей (теория множеств в школе/вузе была?), с которыми можно как-то работать - например, фильтровать, объединять (декартово произведение или более сложно - объединять только записи с одинаковым значением в поле - например, объединяется запись <A, номер_строки> из первой таблицы с записью <B, номер_строки, номер_столбца> из второй - при условии, что номер строки одинаков) и т.д.
В идеале (если образование или образ мыслей подходят) почитать про реляционную алгебру, а потом про собственно базы и SQL (как стандарт де-факто языка БД). Когда поймёте смысл "нормальных форм" - можно двигаться дальше.

Соответственно, нет никакого "прямоугольного порядка". Двумерный массив эмулируется множеством записей <значение, номер_строки, номер_столбца>. И зная два числа (номер строки и номер столбца) - можно спросить у базы запись, в которой они есть (или не получить ничего, если такой записи нет). Соответственно, можно записи с значение=0 просто повыкидывать, а в записях, где значение=1 - не сохранять его, ограничившись множеством записей вида <номер_строки, номер_столбца>.

Хотя по сравнению с битовым массивом это всё очень неоптимально... Ну, базы - они всё-таки не для этого.


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

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

А то всё, что попадалось - муть какая-то, типа: "Ну давайте создадим учебную базу по персоналу. Нажмите там, нажмите сям. Введите в это поле фамилию, в это - год рождения.
Давайте создадим другую базу - продукты и цены ..." И так далее в этом стиле. Как заготовки для конкретных менеджеров подойдет конечно, но для осознания новой логики мышления - ноль пользы((((((


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

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2622
Откуда: Санкт-Петербург
Навскидку нагугленное - https://habr.com/ru/post/145381
(искал по словам "реляционная алгебра" и смотрел по первым строчкам, чтобы было простым языком), там и ссылки на книжки по БД есть.
Ну это чисто чтобы логику ухватить, потом и "давайте создадим учебную базу" станет понятно, хотя лучше учебник, где про первую/вторую/... нормальные формы написано и нафига они нужны (когда их поймёте - схема БД будет строиться практически однозначно, другие варианты просто в голову не придут)


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

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
И наверное не стоит искать книжки по акцессу. Лучше в общем про реляционную модель/бд. Потому что акцесс... ну это "БД для домохозяек", и уровень описания будет соответствующий.


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

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 5891
habr.com/ru/post/145381/ писал(а):
Для ясности, теперь введем строгое определение отношения.
Пусть даны N множеств D1,D2, …. Dn (домены), отношением R над этими множествами называется множество упорядоченных N-кортежей вида <d1,d1,...dn>, где d1 принадлежит D1 и тд. Множества D1,D2,..Dn называются доменами отношения R.
Ну чё, ясность сверкающая, да...
Я аж просветлился))))))))))

NStorm писал(а):
И наверное не стоит искать книжки по акцессу. Лучше в общем про реляционную модель/бд. Потому что акцесс... ну это "БД для домохозяек", и уровень описания будет соответствующий.
Мне ЩАС на нем надо делать. Для домохозяек ли, нет ли - пофиг. По 2002, 2003 нарыл относительно неплохие руководства, но многие приемы, которые там описываются - в 2000 работать не будут.
А конкретно по 2000 - нету ничего(((((( Если кто знает, где качнуть хорошее руководство для домохозяек - поделитесь ссылочкой, плиз.


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

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


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

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


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

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


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

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

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