LINUX.ORG.RU
решено ФорумAdmin

Жизненный цикл статусов в SQL

 ,


0

2

Матрицу:

|  	           | Не готов | Согласование | Ожидание ЗиП | Готов, не отгружен | Готов | Закрыт |  
|Не готов          | 0        |	1            | 1            | 0                  | 0     | 1      | 
|Согласование      | 1        | 1            | 1            | 0                  | 0     | 1      |      
|Ожидание ЗиП	   | 1	      | 1            | 0            | 0                  | 0     | 1      | 
|Готов, не отгружен| 1	      | 1            | 1            | 0                  | 0     | 1      | 
|Готов             | 1	      | 1            | 1            | 1                  | 0     | 1      | 
|Закрыт            | 0	      | 0            | 0            | 0                  | 0     | 0      | 	
Необходимо сохранить в SQL

★★★★★

Данные гомогенные, сохраняй в табличную часть документа. Сам документ - контекст вот этой вот таблицы.

Что-то непонятно? Мб никогда с БД не работал? Всё бывает в первый раз.

Bfgeshka ★★★★★
()

Done’цкий

CREATE TABLE `life` ( `header` TEXT, `not_ready` INTEGER, `coordination` INTEGER, `waiting` INTEGER, `not_shipped` INTEGER, `ready` INTEGER, `closed` INTEGER ); 
INSERT INTO `life` VALUES ( "Не готов",           0, 1, 1, 0, 0, 1 );
INSERT INTO `life` VALUES ( "Согласование",       1, 1, 1, 0, 0, 1 );
INSERT INTO `life` VALUES ( "Ожидание ЗиП",       1, 1, 0, 0, 0, 1 );
INSERT INTO `life` VALUES ( "Готов, не отгружен", 1, 1, 1, 0, 0, 1 );
INSERT INTO `life` VALUES ( "Готов",              1, 1, 1, 1, 0, 1 );
INSERT INTO `life` VALUES ( "Закрыт",             0, 0, 0, 0, 0, 0 );
u5er
()
Последнее исправление: u5er (всего исправлений: 1)

status_from, status_to

vbr ★★★★
()

Правильно ли использовать списки смежности для этого случая, поля в SQL:

'id'
'parent_id'
'sort'
'name' 

petav ★★★★★
() автор топика
Последнее исправление: petav (всего исправлений: 1)

StatusList

MariaDB [yii2_db2]> select * from StatusList;
+----+----------+-----------------------------------+
| id | Statusid | Name                              |
+----+----------+-----------------------------------+
|  1 |        0 | Не готов                          |
|  2 |        1 | Согласование                      |
|  3 |        2 | Ожидание ЗиП                      |
|  4 |        3 | Готов, не отгружен                |
|  5 |        4 | Готов                             |
|  6 |        5 | Закрыт                            |
+----+----------+-----------------------------------+
6 rows in set (0,001 sec)

MariaDB [yii2_db2]>
StatusAssigned
MariaDB [yii2_db2]> select * from StatusAssigned limit 10;
+----+----------+---------------+-------+
| id | Statusid | Next_Statusid | Role  |
+----+----------+---------------+-------+
|  1 |        0 |             1 | Owner |
|  2 |        0 |             2 | Owner |
|  3 |        0 |             4 | Owner |
|  4 |        1 |             0 | Owner |
|  5 |        1 |             2 | Owner |
|  6 |        1 |             4 | Owner |
|  7 |        2 |             0 | Owner |
|  8 |        2 |             1 | Owner |
|  9 |        2 |             4 | Owner |
| 10 |        3 |             0 | Owner |
+----+----------+---------------+-------+
10 rows in set (0,001 sec)

MariaDB [yii2_db2]> 

petav ★★★★★
() автор топика

Я б не стал вот так через матрицу задавать возможности переходов. Это плохо расширяется в SQL. Лучше действительно сделать таблицу со строками из какого в какой статус можно переходить. Тогда добавление новых статусов будет просто добавлением строк. И проверять применимость перехода тоже легко.

no-such-file ★★★★★
()
Ответ на: комментарий от petav

Небольшой совет, не делай статусы числами. Делай короткими строками строками. Например

+----------+-----------------------------------+
| Statusid | Name                              |
+----------+-----------------------------------+
|       NR | Не готов                          |
|        C | Согласование                      |
|        W | Ожидание ЗиП                      |
|      RNS | Готов, не отгружен                |
|        R | Готов                             |
|        D | Закрыт                            |
+----------+-----------------------------------+

Это гораздо проще воспринимается/запоминается и кроме того не создаёт иллюзию какой-то заранее заданной упорядоченности статусов.

Таблица переходов будет типа

+----+----------+---------------+-------+
| id | Statusid | Next_Statusid | Role  |
+----+----------+---------------+-------+
|  1 |       NR |             C | Owner |
|  2 |       NR |             W | Owner |
|  3 |       NR |             R | Owner |

Что можно легко понять без обращения к списку статусов.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.