Easyelectronics.ru

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

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



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

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

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

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


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

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

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

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


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

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


Один запрос:
Код:
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
Сообщения: 2138
Запросом мы показываем весь инвентарь на складе А и В. Плюс все атрибуты, если они есть. При этом у каждого предмета на складе может быть сколько угодно атрибутов. Мы их связываем через Inventory_ID. LEFT JOIN будет выдавать по строчке для каждого атрибута. Мы уже потом когда разбираем данные, понимаем, что это 2 разных атрибута у одного и того же грузовика со "Склада В". При этом у грузовика со "Склада А" атрибутов нет вообще.

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


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

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

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

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


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

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

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

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

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


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

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

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


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

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

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

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


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

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

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


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

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


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

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


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

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 5575
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
Сообщения: 2013
Откуда: Киев
А вы не находили книгу аксесс для чайников?Там вроде уже совсем просто написано, но мне в своё время помогло написать свою недо БД радиодеталей. Коей уже лет 10 и пользуюсь (как продвинутым экселем).


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

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


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

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


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

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

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