|
|
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
explaНаконец, лишние значения можно просто игнорировать используя приоритеты.Если сделали из ЧП организацию, то до данных человека уже не добраться в интерфейсе. Так чтоли? Так себе решеньице... explaК стати, в вашем варианте нет гарантии, что Контрагент существует, а соответсвующие ФЛ, ЧП и т.п. отсутствуют - нет и никакими декларативными ограничениями целостности вы эту проблему не решите. А в отвергнутом варианте всё это легко решается внешними ключами и проверками на записи.Советую и Вам почитать это обсуждение . В этой модели все зависит как далеко хочется пойти в настройке constraint-ов в БД, а что решите контролировать уже на клиенте. explaКоличество типов не имеет значения пока СУБД позволяет добавлять поля в таблицу и никакого нарушения НФ тут нет. Или вы считаете, что нормализация, это когда количество колонок в таблице уменьшается?Я считаю, что значение атрибута ID Физлица зависит от значений атрибутов ID ЮрЛица и ID ЧП . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2008, 19:25:47 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
SeVaавторИнтересная идея - никогда так не думал о наследовании!!!! Надо покумекать - слишком уж нестандартно но многообещающе! Все это давно известно.Полистай 2ю главу в букваре "Data Model Resource Book". В общем виде все твои сущности там рассмотрены А где бы ее посмотреть ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 00:17:45 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
spА где бы ее посмотреть ? :) Покупай и смотри ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 00:57:48 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
BelyspА где бы ее посмотреть ? :) Покупай и смотри Нифигаж сибе!!! а что это у нее цена как у телевизора??? или комуто на жисть не хватает??? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 01:50:56 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
Предлагаю структуру - Таблица 1: ИДКоннтрагента, ИдТипКонтрагента, НазваниеКонтрагента Таблица 2: ИдТипКонтрагента, НазваниеТипаКонтрагента Таблица 3: ИдКонтрагента, ИдРеквизитаКонтрагента, ОписаниеРеквизитаКонтрагента Таблица 4: ИдТипКонтрагента, ИдРеквизитаКонтрагента, НазваниеРеквизитаКонтрагента ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 08:05:11 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
RodionATПредлагаю структуру - Таблица 1: ИДКоннтрагента, ИдТипКонтрагента, НазваниеКонтрагента Таблица 2: ИдТипКонтрагента, НазваниеТипаКонтрагента Таблица 3: ИдКонтрагента, ИдРеквизитаКонтрагента, ОписаниеРеквизитаКонтрагента Таблица 4: ИдТипКонтрагента, ИдРеквизитаКонтрагента, НазваниеРеквизитаКонтрагентаЗачем было писать столько буков. Написали бы просто: EAV ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 11:24:23 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
авторНифигаж сибе!!! а что это у нее цена как у телевизора??? или комуто на жисть не хватает??? :) Проще покупать в pdf, дешевше и быстрее.Если десантом заброшен и не слышал o P2P,я перешлю тебе на почту(ограничения на размер есть?).Нарисуй сначала логическую схему, а затем решай каким образом реализовывать генерализацию.Твой случай частный, можно обойтись только тремя таблицами для основных сущностей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 11:51:22 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
Проверь почту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 12:12:53 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
SeVa, и в pdf искал и на P2P. На амазоне можно твёрдую книгу купить с доплатой за электронный доступ. В почту файл может не влезть. Кинь, пзл. в почту ссылочку на торрент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 13:34:09 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
SeVaПроверь почту Спасибо большое, получил!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 13:36:16 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 15:39:52 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
BelyRodionATПредлагаю структуру - Таблица 1: ИДКоннтрагента, ИдТипКонтрагента, НазваниеКонтрагента Таблица 2: ИдТипКонтрагента, НазваниеТипаКонтрагента Таблица 3: ИдКонтрагента, ИдРеквизитаКонтрагента, ОписаниеРеквизитаКонтрагента Таблица 4: ИдТипКонтрагента, ИдРеквизитаКонтрагента, НазваниеРеквизитаКонтрагентаЗачем было писать столько буков. Написали бы просто: EAV А что такое EAV? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 15:40:30 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
RodionATА что такое EAV? EAV ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 22:51:22 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
Эммм. А можно поинтересоваться - юрлица/физлица и т.п. у вас вне договора не существуют? И если на одно лицо несколько договоров - данные будут создаваться несколько раз? Если не так, то вариантов реализации отдельных таблиц мало: либо разграничение по диапазонам идентификаторов, либо общая таблица для общих атрибутов (аля наследование), либо составные ключи. В первом случае тяжело сопоставлять что есть что, в последних двух - тяжко проверить уникальность. ИМХО, EAV сюда пихать не стоит - чистейший оверкилл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 12:11:14 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
Sinixлибо общая таблица для общих атрибутов (аля наследование), ... в последних двух - тяжко проверить уникальность.В чем именно тяжесть проверки уникальности? Это вобще будет PK/FK на уровне БД - она и будет проверять. Или вы про что-то другое говорите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2008, 00:55:45 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
Да об этом уже выше писалось - надо как-то гарантировать, чтобы ID разнотипных сущностей не пересекались. Если не использовать непересекающиеся диапазоны, то можно ввести поле - тип сущности - в общую таблицу и проверку в CHECK(через функцию) | TRIGGER: чтобы сущность с вносимым ID существовала (если она существует) только в таблице, соответствующей конкретному типу. Или использовать GUID :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2008, 04:22:09 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
Sinix, займитесь лучше проектированием транзакций. Правильные транзакции всегда оставляют за собой правильные данные. FK и PK нужно рассматривать как механизм защиты данных от разрушения в результате параллельного выполнения конкурирующих транзакций (одна удаляет PK, другая в то же время добавляет FK). Строить на FK правила проверки правильности данных пустая трата времени (данные легко проверить простыми SQL запросами). Ваши FK лишь не позволят работать неправильным транзакциям, которых не должно быть в системе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2008, 15:00:53 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
explaSinix, займитесь лучше проектированием транзакций. Правильные транзакции всегда оставляют за собой правильные данные. FK и PK нужно рассматривать как механизм защиты данных от разрушения в результате параллельного выполнения конкурирующих транзакций (одна удаляет PK, другая в то же время добавляет FK). Строить на FK правила проверки правильности данных пустая трата времени (данные легко проверить простыми SQL запросами). Ваши FK лишь не позволят работать неправильным транзакциям, которых не должно быть в системе. та-та ?) Умиляют категоричесие суждения про лёгкость поверки запросами и про правильные транзакции. Вы случаем не путаете транзакции с запросами? Подучите матчасть, плиииз. Как нам помогут транзакции, когда в одной транзакции создаётся общая сущность с ID=1 и для неё создаются details в таблицах юрлиц и физлиц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2008, 07:39:47 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
Про нормализацию как таковую. Сначала надо попытаться сделать, как учат в книгах. Необходимо иметь перед глазами схему. Рекомендую Excel. А когда дело дойдет до запросов, отчетов, сами поймете, что надо денормализовывать. Если в запросе связывается более трех таблиц, то, мне кажется, надо сделать шаг назад и добавить лишние поля. Например, в таблице накладных держать не только ID покупателя, но и его адрес и т.д. Иначе падает производительность. Конечно, придется обновлять ненормализованные поля уже на уровне приложения, но что делать... Я с этим сталкивался при разработке систем товарного учета. Порядка ста таблиц в базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2008, 12:09:55 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
SinixКак нам помогут транзакции, когда в одной транзакции создаётся общая сущность с ID=1 и для неё создаются details в таблицах юрлиц и физлиц? Вот и придумайте как построить транзакцию, чтобы всё было пучком. Возможно, блокирвки придётся навешивать и т.п. А я пока матчасть почитаю. Как сделаете, доложите, пзл.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2008, 14:17:40 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
SinixКак нам помогут транзакции, когда в одной транзакции создаётся общая сущность с ID=1 и для неё создаются details в таблицах юрлиц и физлиц? Это пример неправильной транзакции, которая оставляет за собой противоречивые данные. Ещё пример неправильной транзакции, транзакция которая выполняет дебетовую проводку, но "забывает" выполнить кредитовую (вы конечно можете отказаться от принципа двойной записи, но не факт, что жертва будет оправданной). Вообще, вы пытаетесь смоделировать в реляционной БД понятие связи, которого нет в реляционной модели. Мы всегда можем взять произвольные отношения и соеденить их произвольным образом, так что понятие связи после ER модели фактически утрачивается в реляционной БД и вновь возникает только в SQL запросах и методах. FK только указывает на возможность наличия связи, но в БД может быть много логических связей, которые невозможно описать в терминах FK, даже привлекая вспомогательные структуры. Если вам так важно сохранить понятие связи (в данном случае, как бы сказать..., полиморфной) на уровне БД, переходите на объектные или объектно-реляционные БД, в них всё это уже придумано и реализовано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2008, 16:09:46 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
По порядку. 2 vbgd: 1) ранняя оптимизация зло. 2) изменение структуры данных ради оптимизации зло Единственное, чего можно добиться денормализацией - повышение производительности select запросов. (опечатка оператора была). Это должно отражаться в накладной? Если нет - то какой адрес настоящий? Если да, то потребуется писать триггер на обновление у таблицы "заказчики" и обновлять в нём все "кэшированные" адреса. Если у вас в накладных хранятся данные и из другой таблицы - вам придётся писать триггеры и на эти таблицы. В результате одна операция правки адреса утопит в блокировках (если это блокировочник) половину БД. Да, здесь выигрыш от денормализации будет сопоставим с построением составного индекса по ключу заказчика/адресу. Адрес может быть просто включённым полем. Всё просто :) 2 expla: Для начала давайте договоримся: Запрос - обращение пользователя к СУБД, содержащее в себе несколько выражений DML/DDL Транзакция - средство обеспечения ACID для пользовательского запроса. Вы не можете никак вмешаться в алгоритм работы транзакции. Максимум, что вам удастся - порулить блокировками - опять-таки через ващ запрос. Крактко: Транзакция не может быть некорректной, некорректным может быть только запрос. Как я буду проверять корректность запроса - заранее не скажу. Может, триггеры. Может, проверки на столбце через функцию. Смотреть надо. Но то что дело реализуемое - эт точно. 2 mcureenab: Про неправильность транзакций - выше. Вам что, всем по одному недоучебнику что-то рассказывали ?:) // сорри, не удержался. Про "нетривиальность" связи. Скажите, а ОО(Р)СУБД как-то иначе реализуют такие проверки? Уличная магия, да? :) Про непригодность ограничений: не, вы точно какой-то не тот учебник курили. Кто вам сказал, что ER-диагармма - наше всё? У ER есть свои недостатки и преимущества, но вот описывать в ней концептуальную модель - брр :) Скажите, а как вы отслеживаете корректность данных? Своя логика в каждом запросе? Что будет, если всего в одном запросе будет допущена ошибка в проверке ограничений? P.S. Я ничего не пытаюсь использовать и реализовывать. Подняли тему, я пришёл и сказал своё мнение. Закрыли тему? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2008, 04:38:51 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
Sinix 2 expla: Для начала давайте договоримся: Запрос - обращение пользователя к СУБД, содержащее в себе несколько выражений DML/DDL Транзакция - средство обеспечения ACID для пользовательского запроса. Вы не можете никак вмешаться в алгоритм работы транзакции. Максимум, что вам удастся - порулить блокировками - опять-таки через ващ запрос. Кратко: Транзакция не может быть некорректной, некорректным может быть только запрос. Sinix, Вы - про транзакции СУБД ("системные") , а expla - про "бизнес-транзакции": Мартин Фаулер "Архитектура корпоративных программных приложений" Команды, составляющие транзакцию, могут быть адресованы приложением к СУБД (системные транзакции) или пользователем к приложению (бизнес-транзак- ции) ... Транзакция базы данных — это группа SQL-команд, обрамленная инструкциями начала и завершения. .. Однако смысл системных транзакций остается скрытым для пользователей бизнес- систем. Например, с точки зрения посетителя банковского Web-портала, транзакция состоит из процедуры регистрации, выбора счета, задания суммы, определения вида опе- рации и щелчка на кнопке ОК. Подобная последовательность действий называется бизнес-транзакцией (business transaction) и должна обладать теми же свойствами ACID, что и аналогичная системная транзакция. Если пользователь прерывает выполнение сцена- рия до щелчка на кнопке ОК, любые изменения в состоянии системы подлежат безус- ловной отмене; если транзакция завершается успешно, все ее промежуточные результаты фиксируются на уровне системы только после щелчка на кнопке ОК. Для поддержки свойств ACID бизнес-транзакции необходимо выполнить ее целиком в рамках одной системной транзакции. К сожалению, бизнес-транзакция зачастую пре- дусматривает обработку многих запросов, поэтому для ее реализации потребуется длин- ная (long) системная транзакция. Но во многих случаях эффективность таких транзакций оставляет желать лучшего. ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2008, 13:00:47 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
Когда я говорил про транзакции, то имел в виду "Транзакция базы данных — это группа SQL-команд, обрамленная инструкциями начала и завершения". 2 Sinix , в твоей терминологии те же яйца только вид с боку - тоже запрос со свойствами ACID. Меняем запрос - меняем транзакцию. 2 АнатоЛой , что то Фаулер зарапортовался. Бизнес транзакция не обязана 1:1 соотноситься с транзакцией БД. Если в бизнес транзакции выделить ряд целостных промежуточных состояний, то только переходы между этими состояниями придётся выполнять в рамках транзакции БД. Так бизнес транзакция "заключение договора" не обязана выполняться в рамках одной транзакции БД, которая сосотоит из insert into ЗАКАЗЧИК, insert into ДОГОВОР и commit. Мы можем зарегистрировать заказчика - сделать insert into ЗАКАЗЧИК, commit, потом через некоторое время зарегистрировать договор - insert into ДОГОВОР и commit. Понятно, что при таком подходе наличие в БД заказчика с которыми не заключен договор нужно считать нормальным явлением, и учитывать это обстоятельство в запросах. Если угодно, можно время от времени выполнять сборку мусора, как это принято в современных средах, типа Java и C#. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2008, 14:32:21 |
|
||
|
Донормализовывался - караул!!! )
|
|||
|---|---|---|---|
|
#18+
expla что то Фаулер зарапортовался. Бизнес транзакция не обязана 1:1 соотноситься с транзакцией БД. Про Фаулера сказть не могу: я же не всё цитировал - да и цитата из перевода, а не из оригинала. Дальше по тексту видно, что речь именно о "бизнес транзакция не обязана 1:1 соотноситься с транзакцией БД" - у куча вариантов реализации... Это просто при вырывании из большего контекста так грубо получилось, что ФаулерДля поддержки свойств ACID бизнес-транзакции необходимо выполнить ее целиком в рамках одной системной транзакции. По большему куску текста "необходимо" там звучит как "можно было бы" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2008, 15:17:35 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35708089&tid=1543490]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 213ms |
| total: | 475ms |

| 0 / 0 |
