powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите правильно организовать структуру и выборку.
21 сообщений из 21, страница 1 из 1
Помогите правильно организовать структуру и выборку.
    #39583482
ilw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ilw
Гость
Сразу предупреждаю, я полный нуб, объясняю как могу.

Например имеется абстрактное устройство, будем называть классом Device и задачи для него: Task1, Task2, Task3.
Для конкеретизации, опишу все в java кодах.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
class Device{
        long id;
        String name;
        int ip;
        int filed1;
        String filed2;
        // и так далее
    }
    
    class Task1 {
        long id;
        long device_id; // id от класса Device
        int type = 1;
        int action1;
        int action2;
        int action3;
        // действия и их количество абсолютно разные во всех Тасках, то есть таски абсолютно разные.
    }

    class Task2 {
        long id;
        long device_id; // id от класса Device
        int type = 2;
        int anotherAction1;
        int anotherAction2;
        int anotherAction3;
        int anotherAction4;
        int anotherAction5;
        int anotherAction6;
        // действия и их количество абсолютно разные во всех Тасках, то есть таски абсолютно разные. 
    }

    class Task3 {
        long id;
        long device_id; // id от класса Device
        int type = 3;
        int yetAnotherAction1;
        int yetAnotherAction2;        
        // действия и их количество абсолютно разные во всех Тасках, то есть таски абсолютно разные.  
    }


Далее, для каждого девайса назначаются определенное количество тасков, как с различающийся классов, так и с одинаковых. Напр.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
//псевдокод
Device device1 = new Device(.....);
// Перечень тасков для девайса 1 (Любые комбинации, любое количество)
new Task2
new Task2
new Task1
new Task3


Device device2 = new Device(.....);
// Перечень тасков для девайса 2 (Любые комбинации, любое количество)
new Task1
new Task3

Device device3 = new Device(.....);
// Перечень тасков для девайса 3 (Любые комбинации, любое количество)
new Task1
new Task3
new Task1
new Task3
new Task1
new Task3
new Task1
new Task3
new Task1
new Task3
// и так далее



Я создал таблицу Device со всеми нужными полями, а вот как все это правильно сохранить в базу данных - пока не знаю.
Предположу что
- нужно создавать еще таблицы: Task1, Task2, Task3 ?
- (при сохранении) в эти определенные таблицы заносить таски, Device.id которых соотвутсвует Task.device_id и порядок их выполнения ?
- (при загрузке) делать выборку со всех таблиц Device, Task1, Task2, Task3 - и проверять из каждого таска, равен ли Device.id = Task1.device_id AND Device.id = Task2.device_id AND Device.id = Task3.device_id ?

Во первых, правильное ли предположение, правильная ли организация структуры базы данных или ....?
Если да, как правильно делать оптимизированную выборку с нескольких таблиц, напишите sql запрос, если можно..
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39583484
ilw,

а если завтра появятся такси 5,6,7 , а послезавтра ещё и 8,9,10- будешь ещё таблиц клепать?
А как потом планируешь выгребать данные из них?

Логичнее было бы сделать на все таски одну таблицу, в которой будут поля id-девайса, id-таска и прочие атрибуты именно таска. На экшины внутри таска сделать другую таблицу (id-таска, id-экшина, прочая атрибутика экшинов). Сами девайсы - в третьей таблице....

Тогда всё красиво ляжет на линейные запросы с (внешними) джойнами .

Модератор: Тема перенесена из форума "SQLite".
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39583491
ilw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ilw
Гость
Спасибо, надо все обмозговать.
А вы, примерчик, если не трудно можете набросать?
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39583508
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищите на этом форуме по слову "наследование"
Варианты решения для двух тасков
С одной общей таблицей (таски скорее общие, чем разные)
С двумя таблицами (таски скорее разные, чем общие) - ваш вариант
С тремя таблицами (с одним родителем) - некий гибридный вариант

Кроме того есть бесструктурные варианты
EAV - структура базы понятна только приложению
и CLOB (xml или JSON) - каждый таск хранится в виде объекта целиком

Каждый вариант имеет свои достоинства и недостатки.

ilwА вы, примерчик, если не трудно можете набросать? Здесь же поиск по слову EAV
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39583562
ilw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ilw
Гость
Спасибо, из этого https://m.habrahabr.ru/post/28023/ мне что-то подойдёт?
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39583567
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilw Спасибо, из этого https://m.habrahabr.ru/post/28023/ мне что-то подойдёт? Те же яйца, вид сбоку.
Строковые параметры для объектов = CLOB (xml или JSON)
Параметры всех объектов в одной таблице = С одной общей таблицей
Каждый объект в своей таблице = С двумя таблицами
Параметры объектов в отдельной таблице = EAV
Каждый параметр объектов в отдельной таблице = С тремя таблицами

Чтобы выбрать оптимальный способ нужно знать вы будете свою базу использовать (сейчас и потом).
Достань все свойства у одного объекта (таски у дивайса) - запрос тривиальный и ВСЕ структуры его выполняют хорошо.
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39584021
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ТС: Не вздумайте хранить (числа, даты) параметры в строчных полях. Это приведет к катастрофическим тормозам.
Сделайте для всех типов (целое, флоат, строка, дата, булеан пр.) отдельные поля.
Тогда по ним можно и джоины делать и сложный поиск.
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39584276
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilw
Я создал таблицу Device со всеми нужными полями, а вот как все это правильно сохранить в базу данных - пока не знаю.


Так Hibernate же, если уж ты Java-парень...
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39584282
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilw
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
    
    class Task1 {
        long id;
        long device_id; // id от класса Device
        int type = 1;
        /////////////////////////////////////////// 
        int action1;
        int action2;
        int action3;
        // действия и их количество абсолютно разные во всех Тасках, то есть таски абсолютно разные.
        /////////////////////////////////////////// 
    }

    class Task2 {
        long id;
        long device_id; // id от класса Device
        int type = 2;
        /////////////////////////////////////////// 
        int anotherAction1;
        int anotherAction2;
        int anotherAction3;
        int anotherAction4;
        int anotherAction5;
        int anotherAction6;
        // действия и их количество абсолютно разные во всех Тасках, то есть таски абсолютно разные. 
        /////////////////////////////////////////// 
    }




Ну моветон же, даже в Java.
В СУБД это называется нарушение 1-ой нормальной формы...
в Java не знаю как называется, наверное, просто идиотизм.
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39584295
ilw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ilw
Гость
Я все ещё не определился окончательно, каким способом воспользоваться, сейчас сижу, трачу время изучая базы данных уже основательно.

Например из этой статьи https://m.habrahabr.ru/post/28023/, я не понял как должны выглядеть таблицы "Параметры всех объектов в одной таблице", и как они отличаются от "Параметры объектов в отдельной таблице"?

> Ну моветон же, даже в Java.
Объяснись !
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39584420
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilwЯ все ещё не определился окончательно, каким способом воспользоваться, сейчас сижу, трачу время изучая базы данных уже основательно.

Например из этой статьи https://m.habrahabr.ru/post/28023/, я не понял как должны выглядеть таблицы "Параметры всех объектов в одной таблице", и как они отличаются от "Параметры объектов в отдельной таблице"?

> Ну моветон же, даже в Java.
Объяснись !

В том смысле, что есть как минимум массивы. :-)
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39584449
ilw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ilw
Гость
Это ты к чему конкретно процитировал, выделить необходимую часть текста не судьба?

Есть массивы и дальше что?
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39584464
ilw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ilw
Гость
Наверное один с другим считает , что это
int anotherAction2;
int anotherAction3;
однотипные даные, да я просто в спешке написал инты и экшены , чтобы подчеркнуть, что классы тасков абсолютно разные, только и всего. Сами классы тасков, находятся лишь в зачаточном состоянии и абсолютно далеки от реальных. А пример дан, лишь для показания, что ОНИ СУЩЕСТВЕННО отличаются, большего знать и не надо, для того чтобы ответить на мой вопрос.

На , читай как :
вместо
int anotherAction2;
int anotherAction2;
int anotherAction3;

float somedigit;
String path;
boolean condition;
int flags;

Давай, умник один с другим - делай нормализацию и пихай в массивы разнородные типы.
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39584749
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilw,
как бы очень странно, что ты даёшь абы какие данные и хочешь услышать совет по проектированию БД под них....

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

что же тебе можно ответить на такое?
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39584750
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilw. Сами классы тасков, находятся лишь в зачаточном состоянии и абсолютно далеки от реальных. А пример дан, лишь для показания, что ОНИ СУЩЕСТВЕННО отличаются, большего знать и не надо, .

ну храни тогда все в СУЩЕСТВЕННО разных таблицах. чо...
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39584942
ilw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ilw
Гость
MasterZiv,

Товарищ, давай не разводи демогогию тут, все объяснено нормально, просто кое-кто из умников невнимателен, либо не в том направлении думает.

А кое-кто нормально воспринял инфу:
С двумя таблицами (таски скорее разные, чем общие) - ваш вариант


MasterZiv,
[Quote]
ну храни тогда все в СУЩЕСТВЕННО разных таблицах. чо...
[Quote]
Чэрэз плэчо, давай досвиданья! Иди перечитывай мой изначальный пост ещё раз, дятел.
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39585298
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilw я не понял как должны выглядеть таблицы "Параметры всех объектов в одной таблице"Все таски со всеми свойствами всех типов хранятся в одной таблице.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table task_properies (id int primary key, device_id int references device,
type int,
action1 int,
anotherAction1 int,
anotherAction2 int,
yetAnotherAction1 int
yetAnotherAction2 int
somedigit float,
path String,
condition bool,
flags int
)


естественно для такой структуры будут дыры (в некоторых полях будут null)
я не знаю как SQLite их хранит, возможно с этим можно боротся
Зато такая структура самая простая и быстрая особенно для тяжелых запросов типа: дай мне список дивайсов у которых множества свойств пересекается. (Задания стартовали с разницей не более 5 минут, причем первое было успешным, а второе обломалось)
Главный минус такой структуры - она принципиально ограничена количеством столбцов поэтому, чаще всего применяют гибридный вариант (с тремя таблицами = Каждый параметр объектов в отдельной таблице) вынося в общую таблицу не все, а только некоторые свойства или свойства для индексирования.
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39585359
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Главный минус такой структуры....Главный ее минус в том, что она полностью адово-бредовая. :)
На каждый тип объекта отдельную таблицу ???????? На каждый экшн отдельное поле ??? Это ад.
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39585446
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ilw,

По сути, из того как будут использовать данные увидел только "для каждого девайса назначаются определенное количество тасков, как с различающийся классов, так и с одинаковых"

Таблица задачи (код задачи, тип)
Таблица действий по задачам(код задачи, название действия, приоритет действия внутри задачи)
Таблица устройства (код устройства,....)
Таблица применения задач в устройствах(код записи, код устройства, код задачи, приоритет)

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

Совет, более точно определитесь с сущностями и как Вы будете работать с этими данными. От этого зависит и реализация структуры в базе и запросы на изменения и выборку.
Вам правильно указали, без этого нормальные советы в проектировании базы Вы не получите.
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39585453
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilw,

Прочти что нить про описание процессов, например, http://www.mesa.org/en/B2MML.asp
...
Рейтинг: 0 / 0
Помогите правильно организовать структуру и выборку.
    #39585488
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257естественно для такой структуры будут дыры (в некоторых полях будут null)
я не знаю как SQLite их хранит, возможно с этим можно боротся
Зато такая структура самая простая и быстрая особенно для тяжелых запросов типа: дай мне список дивайсов у которых множества свойств пересекается. (Задания стартовали с разницей не более 5 минут, причем первое было успешным, а второе обломалось)
Главный минус такой структуры - она принципиально ограничена количеством столбцов поэтому, чаще всего применяют гибридный вариант (с тремя таблицами = Каждый параметр объектов в отдельной таблице) вынося в общую таблицу не все, а только некоторые свойства или свойства для индексирования.

Вам не сюда, вам в NoSQL, т.к. вы не можете построить реляционную модель ваших данных.
Например MongoDB.
Храните как хотите и что хотите.
Иногда по этой свалке данных можно делать запросы :-)

Когда вы "увидите" структуру данных, тогда сможете мигрировать в СУРБД, если захотите.
NoSQL затягивает :-)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите правильно организовать структуру и выборку.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]