Гость
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Помогите правильно организовать структуру и выборку. / 21 сообщений из 21, страница 1 из 1
12.01.2018, 18:51
    #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
12.01.2018, 19:05
    #39583484
Помогите правильно организовать структуру и выборку.
ilw,

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

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

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

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

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

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

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

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


Так Hibernate же, если уж ты Java-парень...
...
Рейтинг: 0 / 0
15.01.2018, 12:00
    #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
15.01.2018, 12:07
    #39584295
ilw
ilw
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите правильно организовать структуру и выборку.
Я все ещё не определился окончательно, каким способом воспользоваться, сейчас сижу, трачу время изучая базы данных уже основательно.

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

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

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

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

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

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

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

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

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

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

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

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

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

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


MasterZiv,
[Quote]
ну храни тогда все в СУЩЕСТВЕННО разных таблицах. чо...
[Quote]
Чэрэз плэчо, давай досвиданья! Иди перечитывай мой изначальный пост ещё раз, дятел.
...
Рейтинг: 0 / 0
16.01.2018, 17:05
    #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
16.01.2018, 18:32
    #39585359
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите правильно организовать структуру и выборку.
Главный минус такой структуры....Главный ее минус в том, что она полностью адово-бредовая. :)
На каждый тип объекта отдельную таблицу ???????? На каждый экшн отдельное поле ??? Это ад.
...
Рейтинг: 0 / 0
16.01.2018, 22:11
    #39585446
antand
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите правильно организовать структуру и выборку.
ilw,

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

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

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

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

Прочти что нить про описание процессов, например, http://www.mesa.org/en/B2MML.asp
...
Рейтинг: 0 / 0
17.01.2018, 05:20
    #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]