powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как лучше провести нормализацию таблицы
12 сообщений из 12, страница 1 из 1
Как лучше провести нормализацию таблицы
    #39474411
AK-Shah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таблице Table1 есть поле, которое отвечает за состояние (1-было, 2-стало, 3-удалено, 4-новое).

Хотелось бы от этого уйти, и по возможности хранить ОДНУ запись (если это разумно).

Я рассматриваю такие варианты хранения:

1) Оставить все как было, не заморачиваться.
2) Вместо статуса состояния ввести период действия - удобнее для аналитики за период. Интересно, но количество записей останется такое же.
3) Ввести, например, что-то типа битовой маски -

10 - было
2000 - стало
300 - удалено
4000 - новое

Тогда две строки из статусов 1 и 2 будет закодировано одной строкой 2000+10=2010

Может есть еще какие-то варианты хранения? Поделитесь знаниями/опытом, буду благодарен.
...
Рейтинг: 0 / 0
Как лучше провести нормализацию таблицы
    #39474537
Mr.Fontaine
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AK-Shah, честно говоря, не очень понятно о чём речь.
Ситуацию понял так: допустим есть какой-то заказ.
При создании этого заказа в таблицу Table1 записывается какая-то информация о нём. В поле состояния записываем значение 4.
Затем в какое-то время информация в заказе была изменена. И при этом в Table1 появляется сразу две записи: все поля со значениями из записи с состоянием 4, но в поле состояние пишем значение 1, и вторая запись с изменёнными значениями полей и в поле состояния пишется значение 2
Ну и далее по прошествии какого-то времени, когда возникла необходимость удаления заказа, то создаём новую запись, в которой все поля имеют значения из строки со значением состояния 2, но в поле состояния записывается значение 3
То есть получается что-то типа такого:
Field1 Field2 Field3 Status1 test 35 41 test 35 1222 48 2222 48 3
Я правильно понял ситуацию?
...
Рейтинг: 0 / 0
Как лучше провести нормализацию таблицы
    #39474601
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AK-ShahВ таблице Table1 есть поле, которое отвечает за состояние (1-было, 2-стало, 3-удалено, 4-новое).

3) Ввести, например, что-то типа битовой маски -

10 - было
2000 - стало
300 - удалено
4000 - новое

Тогда две строки из статусов 1 и 2 будет закодировано одной строкой 2000+10=2010


Вот тут совсем запутался, а зачем? Т.е. конкатенация Вам не нравиться?
Тогда две строки из статусов 1 и 2 будет закодировано одной строкой 1||2=12

AK-ShahХотелось бы от этого уйти, и по возможности хранить ОДНУ запись (если это разумно).

Нет препятствий патриотам, делай отдельную таблицу и все записи с "архивными" состояниями (которые я надеюсь все таки нужны) - туда. Только я не очень понял по состояниям ... какое из них считать active, 4-новое или 2- стало .... ну т.е. как по мне странное разбиение.

AK-Shah2) Вместо статуса состояния ввести период действия - удобнее для аналитики за период. Интересно, но количество записей останется такое же.

Тут тоже вопрос зачем период, в жизни хватит Active_date и Parent_id тогда одним запросом можно построить всю историю
...
Рейтинг: 0 / 0
Как лучше провести нормализацию таблицы
    #39474797
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AK-Shah,

Посмотрите возможности Flashback Data Archive.
Например здесь: https://docs.oracle.com/database/121/ADFNS/adfns_flashback.htm#ADFNS1008

В таблице хранится текущее состояние строки,
в архиве хранятся все предыдущие состояния.
...
Рейтинг: 0 / 0
Как лучше провести нормализацию таблицы
    #39475024
AK-Shah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL,

авторТут тоже вопрос зачем период, в жизни хватит Active_date и Parent_id тогда одним запросом можно построить всю историю

А можно пример? Иерархический справочник еще представляю, а это что-то нет.
...
Рейтинг: 0 / 0
Как лучше провести нормализацию таблицы
    #39475036
AK-Shah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНет препятствий патриотам, делай отдельную таблицу и все записи с "архивными" состояниями (которые я надеюсь все таки нужны) - туда. Только я не очень понял по состояниям ... какое из них считать active, 4-новое или 2- стало .... ну т.е. как по мне странное разбиение.

1) Статус 4-новое и 2-стало - абсолютно одинаковые по статусу, лишь указывают, КАК именно были получены эти состояния. Увы, как раз не я придумал, как раз я и хочу уйти от этого, интуитивно понимаю, что это это неправильный способ хранения различных состояний.

2) А чем будет существенно отличаться хранение статусов в архиве и в одной таблице?
...
Рейтинг: 0 / 0
Как лучше провести нормализацию таблицы
    #39475083
georgy_g
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что-то мне подсказывает, что это таблица аудита, заполняемая триггером. при добавлении записи в основную таблицу, триггер записывает в таблицу аудита строчку 4-новое. при изменении появляются 2 строки : 1-было, 2-стало. при окончательном удалении, соответственно, 3-удалено.

напишите смысл таблицы. это аудит или история спецификации заказа или вы таким способом решаете разграничение доступа? в любом случае, надо знать зачем нужна таблица, чтоб посоветовать вам структуру.
...
Рейтинг: 0 / 0
Как лучше провести нормализацию таблицы
    #39475150
AK-Shah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
georgy_g,

Это история спецификации заказа. Скажем, у нас был стол (состояние 2). К нему прикрутили направляющие для ящиков и сделали ящики. Состояние стола изменилось (стало 4). Разумеется, храним не только сами состояния, но и описания, каков состав этого состояния.


P.S. Интересно про Oracle Flashback Technology, но как бы это выглядело в моем случае - пока не понятно. Буду читать до просветления.
...
Рейтинг: 0 / 0
Как лучше провести нормализацию таблицы
    #39475211
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AK-Shah,
я б остановился на п2 (добавить даты с по)
в зависимости от нужд, возможно б создал индекс status,start_date

.....
stax
...
Рейтинг: 0 / 0
Как лучше провести нормализацию таблицы
    #39475638
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AK-ShahMaximaXXL,

авторТут тоже вопрос зачем период, в жизни хватит Active_date и Parent_id тогда одним запросом можно построить всю историю

А можно пример? Иерархический справочник еще представляю, а это что-то нет.

Что-то вроде такого

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t (id, Parent_id, Active_date,status) as(
   select 7,  null, sysdate,    -1 from dual union all
   select 6,  7,    sysdate-1,  1 from dual union all
   select 5,  6,    sysdate-2,  1 from dual union all
   select 4,  null,    sysdate-3,  0 from dual union all
   select 3,  4,    sysdate-4,  1 from dual union all
   select 2,  3,    sysdate-5,  1 from dual union all
   select 1,  2,    sysdate-6,  1 from dual )
   
select id, Parent_id, Active_date ,status
from t
start with Parent_id is null
connect by Parent_id = prior id



Т.о. можно оставить статус в 3 положениях (Активна, История, Закрыта) - так нагляднее
А можно строить на Parent_id (null - Активна, id - История и например -1 для закрытых) - не наглядно, надо коментмровать.
Active_date - дата когда изменения вступили в силу. И вы всегда можете видеть как долго действовали данные видя дату между 2 строк. По Parent_id можно проследить изменения от и до.
...
Рейтинг: 0 / 0
Как лучше провести нормализацию таблицы
    #39475647
georgy_g
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
имеем таблицы Заказ и Спецификация_заказа.
1 Вариант
В спецификации заказа убрать поле состояния, добавить два поля: дата с , дата по. при селекте актуальной версии заказа брать по датам.
2 Вариант
Вести "Редакцию спецификации заказа". Это отдельная таблица с датой. При очередном изменении спецификации создаётся запись в таблице редакции. Строки спецификации цепляются именно к таблице редакции. То есть при начале либо окончании редактирования, сохраняется новая редакция. Устройство строк спецификации для редакции решать вам. Я бы дублировал строки из предыдущей редакции и менял их для текущей.
Есть ещё много способов ведения истории, всё зависит от бизнес-задачи.
Если клиент скажет "мы подумали и решили оставить первоначальную версию", то вы легко откроете самую первую редакцию.
AK-ShahЭто история спецификации заказа. Скажем, у нас был стол (состояние 2). К нему прикрутили направляющие для ящиков и сделали ящики. Состояние стола изменилось (стало 4). Разумеется, храним не только сами состояния, но и описания, каков состав этого состояния.
...
Рейтинг: 0 / 0
Как лучше провести нормализацию таблицы
    #39475651
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*PlusПосмотрите возможности Flashback Data Archive
Не стоит.
Лучше посмотреть на
http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/ilm/temporal/temporal.html

потом осознать, что поддержка этого дела оракелем пока что находится на уровне синтаксического сахара и сделать обычную версионку.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как лучше провести нормализацию таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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