|
|
|
Как лучше организовать звязь записей в таблицах
|
|||
|---|---|---|---|
|
#18+
Имеем таблицы - объекты, организации и таблицу соответствия: 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2008, 03:15 |
|
||
|
Как лучше организовать звязь записей в таблицах
|
|||
|---|---|---|---|
|
#18+
Идентификатор организации "живой" и архивированный будут в предложенном решении разные. Т.е. это станут разные организации со всеми вытекающими. Для решения именно этой проблемы можно разделить таблицу организаций на две: 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] Выборки все немного усложнятся, но все должно работать без проблем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2008, 07:21 |
|
||
|
Как лучше организовать звязь записей в таблицах
|
|||
|---|---|---|---|
|
#18+
KOT MATPOCKuH, да хорошая схема, только копии можно создавать при создании записи объекта - ведь все объекты рано или поздно могут быть закрыты и к каждому надо привязать его организации... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2008, 22:26 |
|
||
|
Как лучше организовать звязь записей в таблицах
|
|||
|---|---|---|---|
|
#18+
igorrrrKOT MATPOCKuH, да хорошая схема, только копии можно создавать при создании записи объекта - ведь все объекты рано или поздно могут быть закрыты и к каждому надо привязать его организации...Копии надо создавать при закрытии объекта, иначе придется придумывать механизм синхронизации разных копий организаций для незакрытых объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2008, 11:48 |
|
||
|
Как лучше организовать звязь записей в таблицах
|
|||
|---|---|---|---|
|
#18+
да, в предыдущем своем посте ступил. Потом понял, полез править, но внимательный Bely меня опередил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2008, 21:24 |
|
||
|
Как лучше организовать звязь записей в таблицах
|
|||
|---|---|---|---|
|
#18+
KOT MATPOCKuH, И можно маленькое уточнение? ведь для данной схемы можно вполне обойтись одним флагом ismain или isarchived, они ведь взаимоисключающие, я верно понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2008, 01:00 |
|
||
|
Как лучше организовать звязь записей в таблицах
|
|||
|---|---|---|---|
|
#18+
igorrrrИ можно маленькое уточнение? ведь для данной схемы можно вполне обойтись одним флагом ismain или isarchived, они ведь взаимоисключающие, я верно понял?да, можно и нужно использовать один флаг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2008, 15:00 |
|
||
|
Как лучше организовать звязь записей в таблицах
|
|||
|---|---|---|---|
|
#18+
igorrrr... ismain или isarchived, они ведь взаимоисключающие, я верно понял? Нет! Не совсем взаимоисключающие: неучтена ситуация, когда для организации все объекты закрыты - тогда все версии будут архивированы, а при создании новой версии, т.е. при "открытии" нового объекта - непонятно, из какой из закрытых версий брать информацию в SOME_ORGANISATION_FIELDS. BelyigorrrrИ можно маленькое уточнение? ведь для данной схемы можно вполне обойтись одним флагом ismain или isarchived...да, можно и нужно использовать один флаг. Согласен, всегда значение двух флагов можно положить в один :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2008, 06:30 |
|
||
|
Как лучше организовать звязь записей в таблицах
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы! Возникли вопросы по SQL. Отправка объекта в архив (копирование организаций с назначением флага архивный, редактирование таблички соответствий). Собственно проблема с редактированием таблички соответствий. так копирую записи: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Как посоветуете обновлять org_ver_id таблички соответствий obj_to_org? Все, что приходит в голову модифицировать приведенный запрос так, что выполняется только одно копирование за раз и после каждого использовать LAST_INSERT_ID(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 04:53 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35616968&tid=1543567]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
185ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 488ms |

| 0 / 0 |
