|
|
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Делал на днях базу и в каждой таблице по-старинке начал лупить колонки: CreateUser, CreateDate, UpdateUser, UpdateDate. А потом подумал - зачем их фигачить в каждую таблицу, если можно сделать таблицу с четыремя этими колонками и референсить на нее в каждой таблице? Просто и со вкусом. Ограничение тут явное я вижу только одно - суммарное число строк во всех таблицах должно быть приемлемым, чтобы колонки ID этой таблицы хватило. А вы что думаете про такой способ ? Просто где бы я не смотрел - люди не обламываются добавлять эти четыре колонки в каждую таблицу. Видимо есть тут какой-то другой драфтбак, не видимый пока мне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2010, 13:01 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
Не важноА вы что думаете про такой способ ? Просто где бы я не смотрел - люди не обламываются добавлять эти четыре колонки в каждую таблицу. Видимо есть тут какой-то другой драфтбак, не видимый пока мне.Плохой способ - больше места для данных, намного тяжелее запросы. Странная идея - атрибуты с одинаковым назначением от разных сущностей пихать в какую-то общую сущность... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2010, 13:29 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
Видимо для получения максимальной производительности запросов и упрощения их кода. А то эти лишние join-ы будут только глаза мозолить в сложных запросах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2010, 13:57 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
alexeyvgНе важноА вы что думаете про такой способ ? Просто где бы я не смотрел - люди не обламываются добавлять эти четыре колонки в каждую таблицу. Видимо есть тут какой-то другой драфтбак, не видимый пока мне.Плохой способ - больше места для данных, намного тяжелее запросы.Это справочные данные, вряд ли они будут использоваться для, например, фильтрации. Так что насчет "тяжелее запросы" не соглашусь. А в ряде случаев, когда эти данные не нужны даже для отображения, так и легче. alexeyvgСтранная идея - атрибуты с одинаковым назначением от разных сущностей пихать в какую-то общую сущность...Это, как раз, в общем случае нормально. А вот что мне кажется плохим - какая недоделанная "историчность" - апдейтить запись могут много раз, а сохранится только самый последний. Тут мне видится два варианта: - нужно знать всю историю изменений по этой записи (тогда нужно хранить информацию обо всех апдейтах и, возможно, даже исторические данные). - важно только текущее состояние записи и последний редактировавший ее является целиком за нее ответственным (тогда не вижу смысла в CreateUser, CreateDate). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2010, 13:59 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
Не важноможно сделать таблицу с четыремя этими колонкамиИ еще нужно знать, что будет происходить с этой таблицей. Если, например, в базе часть таблиц будет реплицироваться, а часть нет, то эту таблицу придется либо реплицировать целиком (и гонять лишние данные), либо отказаться от репликации в связи с большой скоростью роста этой таблицы. И, кстати, тут CreateUser, CreateDate опять будут лишние, т.к. они будут многократно повторятся для одной и той же записи при каждом ее апдейте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2010, 14:03 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
alexeyvg Плохой способ - больше места для данных, намного тяжелее запросы. А чем он плох? добавится один джоин по кластерному индексу. Тут конечно может быть проблема с созданием оптимальных запросов, поскольку один джоин в запросе может кардинально поменять политику выборки. Это есть - по крайней мере в MS SQL. alexeyvg Странная идея - атрибуты с одинаковым назначением от разных сущностей пихать в какую-то общую сущность... Я думаю что это нормально - как в ООП. Общие вещи в базовый класс. miksoft А вот что мне кажется плохим - какая недоделанная "историчность" - апдейтить запись могут много раз, а сохранится только самый последний. Тут нужно немного пояснить. База делается как бэ в соответствии с базой одного CRM (MS Dynamics) Там как раз ведутся две колонки - создавший и последний обновивший. Промежуточные неважны. О репликации разговора нет - это база серверной части приложения. Она одна и в одном месте. Тут еще фишка есть такая как ОРМ. И с добавлением еще одной таблицы префоманс генереного запроса, теоретически, может просесть. Вот я и думаю - стоит ли затевать такой "рефакторинг" базы или по старинке делать колонки в каждой таблице ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2010, 18:29 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
miksoftalexeyvgПлохой способ - больше места для данных, намного тяжелее запросы.Это справочные данные, вряд ли они будут использоваться для, например, фильтрации. Так что насчет "тяжелее запросы" не соглашусь. А в ряде случаев, когда эти данные не нужны даже для отображения, так и легче.Согласен, конечно важно, как эти данные будут использоваться... Не важноalexeyvg Плохой способ - больше места для данных, намного тяжелее запросы. А чем он плох? добавится один джоин по кластерному индексу. Тут конечно может быть проблема с созданием оптимальных запросов, поскольку один джоин в запросе может кардинально поменять политику выборки. Это есть - по крайней мере в MS SQL.Зависит от использования этих полей. Если нужно показывать поля постоянно - добавится просто джойн. Это-же не повышает производительность? А вот если в запросах будет, например, фильтр для учёта прав, или что-то вроде показа записей их создателю первыми, то такое разделение просто поставит всё раком (например, в постраничных выборках без фильтров). Не важноalexeyvg Странная идея - атрибуты с одинаковым назначением от разных сущностей пихать в какую-то общую сущность... Я думаю что это нормально - как в ООП. Общие вещи в базовый класс.Это для ООП нормально. И то - нормально в наследовании, а здесь-же нету наследования. В ООП ведь при создании объекта класса-наследника не создаётся объект, в котором в качестве члена присутствует объект класса-родителя? Для РСУБД так делают, но не по принципу наличия одинаковых имён полей :-) , а выделяя именно общую сужность. Т.е. можно выделить сущность "документ" из сущностей вида "документ типа ХХХ", сделать "документ" отдельной таблицей и перенести туда какие-то общие атрибуты. ПРи этом действия могут быть сделаны над общей и над производными таблицами как по отдельности, так и вместе. У вас же не предполагается использование таблицы с датами отдельно, как самостоятельной сущности? Это ключевая вещь при таком выборе. Просто искать группы полей с одинаковыми именами и выносить - неправильно. Не важноmiksoft А вот что мне кажется плохим - какая недоделанная "историчность" - апдейтить запись могут много раз, а сохранится только самый последний. Тут нужно немного пояснить. База делается как бэ в соответствии с базой одного CRM (MS Dynamics) Там как раз ведутся две колонки - создавший и последний обновивший. Промежуточные неважны.Если не важны - вопросов нет. Обычно как раз в поисках виноватого эти данные очень даже важны. :-) Какая разница, кто там последный поменял неизвестно что ? Важно, кто именно поменял что-то конкретное, например, какую-то содержательую часть записи. Не важноТут еще фишка есть такая как ОРМ. И с добавлением еще одной таблицы префоманс генереного запроса, теоретически, может просесть. Вот я и думаю - стоит ли затевать такой "рефакторинг" базы или по старинке делать колонки в каждой таблицеНу вот, вы даже беспокоитесь, не слишком ли сложно будет клиенту прочитать :-) А делать джойн по ключу - это по вашему ничего не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2010, 18:50 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
alexeyvgКакая разница, кто там последный поменял неизвестно что ? Важно, кто именно поменял что-то конкретное, например, какую-то содержательую часть записи. +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2010, 20:11 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
судя по всему, цель - просто сделать. А практическая польза от этого не интересует. Тогда какая разница как сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2010, 20:15 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
miksoft alexeyvgСтранная идея - атрибуты с одинаковым назначением от разных сущностей пихать в какую-то общую сущность...Это, как раз, в общем случае нормально. Нормальная идея - это анализировать такие совпадения. А вот сразу пихать в общую - таки, странная, да... :) miksoftЭто справочные данные, вряд ли они будут использоваться для, например, фильтрации. "Хочу отфильтровать все документы/отчёты/настройки, которые я создавал в этом месяце" - не пойдёт? miksoft А в ряде случаев, когда эти данные не нужны даже для отображения, так и легче. Ммм. Чем и насколько легче? miksoft А вот что мне кажется плохим - какая недоделанная "историчность" - апдейтить запись могут много раз, а сохранится только самый последний. Тут мне видится два варианта: - нужно знать всю историю изменений по этой записи (тогда нужно хранить информацию обо всех апдейтах и, возможно, даже исторические данные). Одно другому не мешает.. miksoft - важно только текущее состояние записи и последний редактировавший ее является целиком за нее ответственным (тогда не вижу смысла в CreateUser, CreateDate). Необходимость CreateUser, CreateDate: 1. смотри пример выше с фильтрацией 2. полезно при репликациях 3. полезно при чистке БД - слиянии... Правда, в случае ведения полной истории вся эта информация доступна из истории, но всё-таки стоит сравнить производительность... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2010, 10:48 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
АнатоЛойmiksoftЭто справочные данные, вряд ли они будут использоваться для, например, фильтрации."Хочу отфильтровать все документы/отчёты/настройки, которые я создавал в этом месяце" - не пойдёт?Зависит от предметной области. У нас, например, такого вопроса не возникало никогда за много лет. Обычно все разборки идут от объекта - товара, накладной, чека, распродажи и т.п.АнатоЛой miksoftА в ряде случаев, когда эти данные не нужны даже для отображения, так и легче.Ммм. Чем и насколько легче?Если, например, в каком-то запросе понадобится сканирование таблицы с объектами, то этот запрос станет легче, т.к. ему придется меньше данных читать с диска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2010, 11:37 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
АнатоЛой"Хочу отфильтровать все документы/отчёты/настройки, которые я создавал в этом месяце" - не пойдёт?Серверу придётся сделать 2 отфильтрованных списка ID документов, а потом уже вычислить по ним пересечение. Это тяжёлая операция. Конечно, "тяжесть" проявится, если данных много, на тыще записей не заметите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2010, 11:57 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
On 31.10.2010 13:01, Не важно wrote: > А вы что думаете про такой способ ? Замечательный способ. > Просто где бы я не смотрел - люди не обламываются добавлять эти четыре колонки в > каждую таблицу. Видимо есть тут какой-то другой драфтбак, не видимый пока мне. Кроме того, что нужно будет JOIN-ить таблицу изменений при каждой выборке данных, требующей также и CreateUser, CreateDate или UpdateUser, UpdateDate, (это не страшно) -- никаких недостатков. Кстати, полей тогда нужно наверное только 3: modificationType, user, date, Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2010, 12:05 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
On 31.10.2010 13:29, alexeyvg wrote: > Плохой способ - больше места для данных, намного тяжелее запросы. > > Странная идея - атрибуты с одинаковым назначением от разных сущностей пихать в > какую-то общую сущность... Ничего ни тяжёлого (ни для программиста, ни для сервера), ни странного нет. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2010, 12:06 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
АнатоЛойНормальная идея - это анализировать такие совпадения. А вот сразу пихать в общую - таки, странная, да... :)Ну так вот я и анализирую. У вас, собственно, два аргумента: 1. вам так нравится 2. в ООП так делают Я говорил, что вынесение части полей в общую сущность можно в том случае, если это именно самостоятельная сущность, с которой работает ваша система. Например, есть таблица Документ, есть много таблиц ДокументТипаХХХ. Система много работает только с таблицей Документ и с общими атрибутами для всех типов документов, которые вынесены в эту таблицу. А вот уже при проведении какой-то проводки или для расчётов по конкретному типу документа обращаемся к остальным таблицам. miksoft ещё напомнил про случаи вынесения широких редкоиспользуемых полей одной таблицы для уменьшения объёма скана. У вас, судя по описанию, таких вариантов нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2010, 12:08 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
alexeyvg, я так понял, что всё описанное направлено ТС? А то я как раз целиком с вашими выкладками согласен :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2010, 20:05 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
АнатоЛойalexeyvg, я так понял, что всё описанное направлено ТС? А то я как раз целиком с вашими выкладками согласен :)Да-да, конечно - не совсем внятно написал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2010, 20:19 |
|
||
|
Теоретический вопрос организации инфы изменения строк
|
|||
|---|---|---|---|
|
#18+
Не важноА потом подумал - зачем их фигачить В таком виде мысль наиболее правильна Не важноА вы что думаете про такой способ ? Чаще всего это четыре нафиг не нужных поля. В следующем по частоте случае - это четыре поля, которых не хватает для решения задачи и приходится фигачить ещё :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2010, 23:46 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36932493&tid=1542459]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
87ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 424ms |

| 0 / 0 |
