powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как лучше организовать звязь записей в таблицах
9 сообщений из 9, страница 1 из 1
Как лучше организовать звязь записей в таблицах
    #35616384
igorrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеем таблицы - объекты, организации и таблицу соответствия:

object
object_id
SOME_OBJECT_FIELDS
closed

organisation
organisation_id
SOME_ORGANISATION_FIELDS

obj_to_org
object_id
organisation_id


Каждому из объектов может соответствовать одна и более организаций. Поле closed таблицы объектов указывает текущий статус, который может быть 1 - закрыт и 0 - открыт. Поля SOME_ORGANISATION_FIELDS периодически редактируются, что следовательно отображается на выборках по объектам. От доблестного руководства поступило задание ввести такую схему: при закрытии объекта "запоминать" информацию о организациях на момент закрытия так, что последующие изменения организаций на закрытые объекты не влияли.

Нужен совет, как это организовать что бы запросы выборки закрытых и открытых объектов были универсальны. Единственное, что приходит в голову в таблице организаций ввести некий флаг isarchived для организаций доступных для редактирования = 0, и соответственно 1 - для недоступных. Таким образом, при закрытии объекта копировать все записи его организаций и устанавливать для них isarchived=1, а при выборках сравнивать closed и isarchived. Неприятно что и записи соответствий придется копировать, какое-то плодение сущностей получается Подскажите, какие есть недостатки у такого подхода, как можно сделать лучше, универсальнее?

З.Ы. Действо происходит под MySQL 5.0
...
Рейтинг: 0 / 0
Как лучше организовать звязь записей в таблицах
    #35616403
KOT MATPOCKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идентификатор организации "живой" и архивированный будут в предложенном решении разные.
Т.е. это станут разные организации со всеми вытекающими.

Для решения именно этой проблемы можно разделить таблицу организаций на две:
1) организации (organisation_id)
2) версия организации (org_ver_id, organisation_id, ismain, isarchived, SOME_ORGANISATION_FIELDS)

Соответсвенно, obj_to_org должна вместо organisation_id содержать org_ver_id

Тогда, при закрытии объекта, для всех связей с версиями организаций создаем копии версий, помеченных isarchived=1, и изменяем эти связи obj_to_org .org_ver_id = [Новый_org_ver_id]

Выборки все немного усложнятся, но все должно работать без проблем
...
Рейтинг: 0 / 0
Как лучше организовать звязь записей в таблицах
    #35616968
igorrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KOT MATPOCKuH, да хорошая схема, только копии можно создавать при создании записи объекта - ведь все объекты рано или поздно могут быть закрыты и к каждому надо привязать его организации...
...
Рейтинг: 0 / 0
Как лучше организовать звязь записей в таблицах
    #35617526
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igorrrrKOT MATPOCKuH, да хорошая схема, только копии можно создавать при создании записи объекта - ведь все объекты рано или поздно могут быть закрыты и к каждому надо привязать его организации...Копии надо создавать при закрытии объекта, иначе придется придумывать механизм синхронизации разных копий организаций для незакрытых объектов.
...
Рейтинг: 0 / 0
Как лучше организовать звязь записей в таблицах
    #35619017
igorrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, в предыдущем своем посте ступил. Потом понял, полез править, но внимательный Bely меня опередил
...
Рейтинг: 0 / 0
Как лучше организовать звязь записей в таблицах
    #35619234
igorrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KOT MATPOCKuH,

И можно маленькое уточнение? ведь для данной схемы можно вполне обойтись одним флагом ismain или isarchived, они ведь взаимоисключающие, я верно понял?
...
Рейтинг: 0 / 0
Как лучше организовать звязь записей в таблицах
    #35620586
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igorrrrИ можно маленькое уточнение? ведь для данной схемы можно вполне обойтись одним флагом ismain или isarchived, они ведь взаимоисключающие, я верно понял?да, можно и нужно использовать один флаг.
...
Рейтинг: 0 / 0
Как лучше организовать звязь записей в таблицах
    #35621782
KOT MATPOCKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igorrrr... ismain или isarchived, они ведь взаимоисключающие, я верно понял?

Нет!
Не совсем взаимоисключающие: неучтена ситуация, когда для организации все объекты закрыты - тогда все версии будут архивированы, а при создании новой версии, т.е. при "открытии" нового объекта - непонятно, из какой из закрытых версий брать информацию в SOME_ORGANISATION_FIELDS.

BelyigorrrrИ можно маленькое уточнение? ведь для данной схемы можно вполне обойтись одним флагом ismain или isarchived...да, можно и нужно использовать один флаг.

Согласен, всегда значение двух флагов можно положить в один :)
...
Рейтинг: 0 / 0
Как лучше организовать звязь записей в таблицах
    #35656917
igorrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы!

Возникли вопросы по SQL.

Отправка объекта в архив (копирование организаций с назначением флага архивный, редактирование таблички соответствий). Собственно проблема с редактированием таблички соответствий.

так копирую записи:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
INSERT INTO `organisation_versions` ( /*org_ver_id autoincremented*/  `organisation_id`,  `SOME_ORGANISATION_FIELDS`,  `isarchived`
  ) SELECT /*org_ver_id,*/ `organisation_id`,  SOME_ORGANISATION_FIELDS,   1  
  FROM `organisation_versions` WHERE `org_ver_id` IN 
  ( /* здесь возвращает несколько организаций */
   SELECT `org_ver_id` 
   FROM `obj_to_org`
   WHERE `object_id` =  666  
   ORDER BY `org_ver_id`
  )

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


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