powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Совет, как организовать хранение данных?
10 сообщений из 10, страница 1 из 1
Совет, как организовать хранение данных?
    #40080508
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые, посоветуйте, как правильно сделать следующее.
Есть таблица с документами-заказами и таблица-справочник рабочих на фирме. Требуется отправить на каждый заказ группу рабочих в составе от 1 до нескольких человек. Вот как в заказе в одном поле сохранить все id отправленных по нему рабочих?
1) Сериализировать в последовательность байтов и сохранить в блобе?
2) То же самое, но использовать JSON array?
3) Добавить новую таблицу (бригада) и в ней хранить состав группы, а в заказе использовать id бригады? Но тут тоже упираюсь в то, что заранее неизвестно кол-во столбцов под состав бригады.
4) еще какие-то варианты?

Никаких действий (сортировка, выборочная выборка и пр.) по этому полю в заказе не планируется, только выборка полного состава группы/бригады.
...
Рейтинг: 0 / 0
Совет, как организовать хранение данных?
    #40080524
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или, если достоверно известно, что максимальное число рабочих в группе ограничено, скажем, восемью - просто создать в заказе 8 полей id_worker1, ... , id_worker8 с default=NULL и заполнять их необходимое число? И не париться с доп.таблицами, (де)сериализацией и т.п.?
...
Рейтинг: 0 / 0
Совет, как организовать хранение данных?
    #40080538
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавить новую таблицу, хранящую ID заказа и ID работника. Если на заказ отправлено несколько работников, в таблице будет несколько записей.
Соответственно из таблицы заказов поле работников вообще убрать.
...
Рейтинг: 0 / 0
Совет, как организовать хранение данных?
    #40080545
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

И точно, спасибо!
...
Рейтинг: 0 / 0
Совет, как организовать хранение данных?
    #40081153
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina
Добавить новую таблицу, хранящую ID заказа и ID работника. Если на заказ отправлено несколько работников, в таблице будет несколько записей.

Код: sql
1.
2.
3.
4.
5.
CREATE TABLE `order_worker` (
  `id_order` int NOT NULL,
  `id_worker` int NOT NULL,
  PRIMARY KEY (`id_order`,`id_worker`)
) ENGINE=InnoDB


Доп. вопрос: правильно ли я создал первичный ключ (из двух полей)? Или он вообще тут не нужен?
...
Рейтинг: 0 / 0
Совет, как организовать хранение данных?
    #40081237
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да как бы он не мешает. Пусть будет.
...
Рейтинг: 0 / 0
Совет, как организовать хранение данных?
    #40081272
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiYing
Доп. вопрос: правильно ли я создал первичный ключ (из двух полей)? Или он вообще тут не нужен?
Нужен.
А еще, в зависимости от запросов, может понадобится и индекс по полю id_worker или даже (`id_worker`,`id_order`). Какой именно - зависит от версии MySQL.
...
Рейтинг: 0 / 0
Совет, как организовать хранение данных?
    #40081285
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft
Нужен.
А еще, в зависимости от запросов, может понадобится и индекс по полю id_worker или даже (`id_worker`,`id_order`). Какой именно - зависит от версии MySQL.

Спасибо. Запрос будет один - выбрать всех работников по заданному приказу, примерно такой:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT w.fio, w.spec
FROM order_worker ow
INNER JOIN workers w ON ow.id_worker=w.id
WHERE ow.id_order=3

--DDL
CREATE TABLE `order_worker` (
  `id_order` int NOT NULL,
  `id_worker` int NOT NULL,
  PRIMARY KEY (`id_order`,`id_worker`),
  KEY `fk_w` (`id_worker`),
  CONSTRAINT `fk_r` FOREIGN KEY (`id_order`) REFERENCES `orders` (`id`),
  CONSTRAINT `fk_w` FOREIGN KEY (`id_worker`) REFERENCES `workers` (`id`)
) ENGINE=InnoDB


Для такого запроса в `order_worker` все же ключи созданы верно? MySQL v8.0.25
...
Рейтинг: 0 / 0
Совет, как организовать хранение данных?
    #40081360
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiYing
Запрос будет один - выбрать всех работников по заданному приказу
Ой, ну и сколько там их, тех работников, на один приказ? десяток? ну сотня? да ниачём, про производительность на таких объёмах можно даже не думать.
...
Рейтинг: 0 / 0
Совет, как организовать хранение данных?
    #40081489
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiYing
Для такого запроса в `order_worker` все же ключи созданы верно?
Для такого запроса - да. Но запрос не похож на промышленный...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Совет, как организовать хранение данных?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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