powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Донормализовывался - караул!!! )
25 сообщений из 111, страница 4 из 5
Донормализовывался - караул!!! )
    #35706566
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explaНаконец, лишние значения можно просто игнорировать используя приоритеты.Если сделали из ЧП организацию, то до данных человека уже не добраться в интерфейсе. Так чтоли? Так себе решеньице...

explaК стати, в вашем варианте нет гарантии, что Контрагент существует, а соответсвующие ФЛ, ЧП и т.п. отсутствуют - нет и никакими декларативными ограничениями целостности вы эту проблему не решите. А в отвергнутом варианте всё это легко решается внешними ключами и проверками на записи.Советую и Вам почитать это обсуждение .

В этой модели все зависит как далеко хочется пойти в настройке constraint-ов в БД, а что решите контролировать уже на клиенте.

explaКоличество типов не имеет значения пока СУБД позволяет добавлять поля в таблицу и никакого нарушения НФ тут нет. Или вы считаете, что нормализация, это когда количество колонок в таблице уменьшается?Я считаю, что значение атрибута ID Физлица зависит от значений атрибутов ID ЮрЛица и ID ЧП .
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35706931
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaавторИнтересная идея - никогда так не думал о наследовании!!!!
Надо покумекать - слишком уж нестандартно но многообещающе!
Все это давно известно.Полистай 2ю главу в букваре "Data Model Resource Book".
В общем виде все твои сущности там рассмотрены

А где бы ее посмотреть ? :)
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35706990
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spА где бы ее посмотреть ? :) Покупай и смотри
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35707031
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyspА где бы ее посмотреть ? :) Покупай и смотри

Нифигаж сибе!!! а что это у нее цена как у телевизора??? или комуто на жисть не хватает??? :)
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35707129
RodionAT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю структуру -
Таблица 1: ИДКоннтрагента, ИдТипКонтрагента, НазваниеКонтрагента
Таблица 2: ИдТипКонтрагента, НазваниеТипаКонтрагента
Таблица 3: ИдКонтрагента, ИдРеквизитаКонтрагента, ОписаниеРеквизитаКонтрагента
Таблица 4: ИдТипКонтрагента, ИдРеквизитаКонтрагента, НазваниеРеквизитаКонтрагента
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35707555
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RodionATПредлагаю структуру -
Таблица 1: ИДКоннтрагента, ИдТипКонтрагента, НазваниеКонтрагента
Таблица 2: ИдТипКонтрагента, НазваниеТипаКонтрагента
Таблица 3: ИдКонтрагента, ИдРеквизитаКонтрагента, ОписаниеРеквизитаКонтрагента
Таблица 4: ИдТипКонтрагента, ИдРеквизитаКонтрагента, НазваниеРеквизитаКонтрагентаЗачем было писать столько буков. Написали бы просто: EAV
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35707665
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНифигаж сибе!!! а что это у нее цена как у телевизора??? или комуто на жисть не хватает??? :)
Проще покупать в pdf, дешевше и быстрее.Если десантом заброшен и не слышал o P2P,я перешлю тебе на почту(ограничения на размер есть?).Нарисуй сначала логическую схему, а затем решай каким образом реализовывать генерализацию.Твой случай частный, можно обойтись только тремя таблицами для основных сущностей
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35707760
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверь почту
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35708081
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,
и в pdf искал и на P2P. На амазоне можно твёрдую книгу купить с доплатой за электронный доступ. В почту файл может не влезть. Кинь, пзл. в почту ссылочку на торрент.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35708089
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaПроверь почту

Спасибо большое, получил!!!
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35708510
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35708513
RodionAT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelyRodionATПредлагаю структуру -
Таблица 1: ИДКоннтрагента, ИдТипКонтрагента, НазваниеКонтрагента
Таблица 2: ИдТипКонтрагента, НазваниеТипаКонтрагента
Таблица 3: ИдКонтрагента, ИдРеквизитаКонтрагента, ОписаниеРеквизитаКонтрагента
Таблица 4: ИдТипКонтрагента, ИдРеквизитаКонтрагента, НазваниеРеквизитаКонтрагентаЗачем было писать столько буков. Написали бы просто: EAV
А что такое EAV?
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35709467
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RodionATА что такое EAV? EAV
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35716747
Sinix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эммм. А можно поинтересоваться - юрлица/физлица и т.п. у вас вне договора не существуют? И если на одно лицо несколько договоров - данные будут создаваться несколько раз?

Если не так, то вариантов реализации отдельных таблиц мало: либо разграничение по диапазонам идентификаторов, либо общая таблица для общих атрибутов (аля наследование), либо составные ключи. В первом случае тяжело сопоставлять что есть что, в последних двух - тяжко проверить уникальность.

ИМХО, EAV сюда пихать не стоит - чистейший оверкилл.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35718707
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sinixлибо общая таблица для общих атрибутов (аля наследование), ... в последних двух - тяжко проверить уникальность.В чем именно тяжесть проверки уникальности?
Это вобще будет PK/FK на уровне БД - она и будет проверять.

Или вы про что-то другое говорите?
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35718797
Sinix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да об этом уже выше писалось - надо как-то гарантировать, чтобы ID разнотипных сущностей не пересекались. Если не использовать непересекающиеся диапазоны, то можно ввести поле - тип сущности - в общую таблицу и проверку в CHECK(через функцию) | TRIGGER: чтобы сущность с вносимым ID существовала (если она существует) только в таблице, соответствующей конкретному типу. Или использовать GUID :)
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35720152
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sinix,

займитесь лучше проектированием транзакций. Правильные транзакции всегда оставляют за собой правильные данные. FK и PK нужно рассматривать как механизм защиты данных от разрушения в результате параллельного выполнения конкурирующих транзакций (одна удаляет PK, другая в то же время добавляет FK). Строить на FK правила проверки правильности данных пустая трата времени (данные легко проверить простыми SQL запросами).

Ваши FK лишь не позволят работать неправильным транзакциям, которых не должно быть в системе.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35721468
Sinix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explaSinix,

займитесь лучше проектированием транзакций. Правильные транзакции всегда оставляют за собой правильные данные. FK и PK нужно рассматривать как механизм защиты данных от разрушения в результате параллельного выполнения конкурирующих транзакций (одна удаляет PK, другая в то же время добавляет FK). Строить на FK правила проверки правильности данных пустая трата времени (данные легко проверить простыми SQL запросами).

Ваши FK лишь не позволят работать неправильным транзакциям, которых не должно быть в системе.

та-та ?)

Умиляют категоричесие суждения про лёгкость поверки запросами и про правильные транзакции.
Вы случаем не путаете транзакции с запросами? Подучите матчасть, плиииз.

Как нам помогут транзакции, когда в одной транзакции создаётся общая сущность с ID=1 и для неё создаются details в таблицах юрлиц и физлиц?
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35721945
vbgd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про нормализацию как таковую.
Сначала надо попытаться сделать, как учат в книгах.
Необходимо иметь перед глазами схему. Рекомендую Excel.

А когда дело дойдет до запросов, отчетов, сами поймете, что надо денормализовывать.

Если в запросе связывается более трех таблиц, то, мне кажется,
надо сделать шаг назад и добавить лишние поля.
Например, в таблице накладных держать не только ID покупателя,
но и его адрес и т.д.

Иначе падает производительность.

Конечно, придется обновлять ненормализованные поля уже на уровне приложения,
но что делать...

Я с этим сталкивался при разработке систем товарного учета.
Порядка ста таблиц в базе.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35722373
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SinixКак нам помогут транзакции, когда в одной транзакции создаётся общая сущность с ID=1 и для неё создаются details в таблицах юрлиц и физлиц?

Вот и придумайте как построить транзакцию, чтобы всё было пучком. Возможно, блокирвки придётся навешивать и т.п. А я пока матчасть почитаю. Как сделаете, доложите, пзл..
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35722775
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SinixКак нам помогут транзакции, когда в одной транзакции создаётся общая сущность с ID=1 и для неё создаются details в таблицах юрлиц и физлиц?

Это пример неправильной транзакции, которая оставляет за собой противоречивые данные. Ещё пример неправильной транзакции, транзакция которая выполняет дебетовую проводку, но "забывает" выполнить кредитовую (вы конечно можете отказаться от принципа двойной записи, но не факт, что жертва будет оправданной).

Вообще, вы пытаетесь смоделировать в реляционной БД понятие связи, которого нет в реляционной модели. Мы всегда можем взять произвольные отношения и соеденить их произвольным образом, так что понятие связи после ER модели фактически утрачивается в реляционной БД и вновь возникает только в SQL запросах и методах. FK только указывает на возможность наличия связи, но в БД может быть много логических связей, которые невозможно описать в терминах FK, даже привлекая вспомогательные структуры.

Если вам так важно сохранить понятие связи (в данном случае, как бы сказать..., полиморфной) на уровне БД, переходите на объектные или объектно-реляционные БД, в них всё это уже придумано и реализовано.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35723654
Sinix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По порядку.

2 vbgd:
1) ранняя оптимизация зло.
2) изменение структуры данных ради оптимизации зло

Единственное, чего можно добиться денормализацией - повышение производительности select запросов. (опечатка оператора была). Это должно отражаться в накладной? Если нет - то какой адрес настоящий? Если да, то потребуется писать триггер на обновление у таблицы "заказчики" и обновлять в нём все "кэшированные" адреса. Если у вас в накладных хранятся данные и из другой таблицы - вам придётся писать триггеры и на эти таблицы. В результате одна операция правки адреса утопит в блокировках (если это блокировочник) половину БД.

Да, здесь выигрыш от денормализации будет сопоставим с построением составного индекса по ключу заказчика/адресу. Адрес может быть просто включённым полем. Всё просто :)

2 expla:
Для начала давайте договоримся:
Запрос - обращение пользователя к СУБД, содержащее в себе несколько выражений DML/DDL
Транзакция - средство обеспечения ACID для пользовательского запроса. Вы не можете никак вмешаться в алгоритм работы транзакции. Максимум, что вам удастся - порулить блокировками - опять-таки через ващ запрос.

Крактко: Транзакция не может быть некорректной, некорректным может быть только запрос.

Как я буду проверять корректность запроса - заранее не скажу. Может, триггеры. Может, проверки на столбце через функцию. Смотреть надо. Но то что дело реализуемое - эт точно.

2 mcureenab:

Про неправильность транзакций - выше. Вам что, всем по одному недоучебнику что-то рассказывали ?:) // сорри, не удержался.

Про "нетривиальность" связи. Скажите, а ОО(Р)СУБД как-то иначе реализуют такие проверки? Уличная магия, да? :)

Про непригодность ограничений: не, вы точно какой-то не тот учебник курили. Кто вам сказал, что ER-диагармма - наше всё? У ER есть свои недостатки и преимущества, но вот описывать в ней концептуальную модель - брр :) Скажите, а как вы отслеживаете корректность данных? Своя логика в каждом запросе? Что будет, если всего в одном запросе будет допущена ошибка в проверке ограничений?

P.S. Я ничего не пытаюсь использовать и реализовывать. Подняли тему, я пришёл и сказал своё мнение. Закрыли тему? :)
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35724503
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sinix
2 expla:
Для начала давайте договоримся:
Запрос - обращение пользователя к СУБД, содержащее в себе несколько выражений DML/DDL
Транзакция - средство обеспечения ACID для пользовательского запроса. Вы не можете никак вмешаться в алгоритм работы транзакции. Максимум, что вам удастся - порулить блокировками - опять-таки через ващ запрос.

Кратко: Транзакция не может быть некорректной, некорректным может быть только запрос.


Sinix, Вы - про транзакции СУБД ("системные") , а expla - про "бизнес-транзакции":

Мартин Фаулер "Архитектура корпоративных программных приложений"

Команды, составляющие транзакцию, могут быть адресованы приложением
к СУБД (системные транзакции) или пользователем к приложению (бизнес-транзак-
ции)
...
Транзакция базы данных — это группа SQL-команд, обрамленная инструкциями начала и завершения.
..
Однако смысл системных транзакций остается скрытым для пользователей бизнес-
систем. Например, с точки зрения посетителя банковского Web-портала, транзакция
состоит из процедуры регистрации, выбора счета, задания суммы, определения вида опе-
рации и щелчка на кнопке ОК. Подобная последовательность действий называется
бизнес-транзакцией (business transaction) и должна обладать теми же свойствами ACID, что
и аналогичная системная транзакция. Если пользователь прерывает выполнение сцена-
рия до щелчка на кнопке ОК, любые изменения в состоянии системы подлежат безус-
ловной отмене; если транзакция завершается успешно, все ее промежуточные результаты
фиксируются на уровне системы только после щелчка на кнопке ОК.
Для поддержки свойств ACID бизнес-транзакции необходимо выполнить ее целиком
в рамках одной системной транзакции. К сожалению, бизнес-транзакция зачастую пре-
дусматривает обработку многих запросов, поэтому для ее реализации потребуется длин-
ная (long) системная транзакция. Но во многих случаях эффективность таких транзакций
оставляет желать лучшего.
...
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35724776
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда я говорил про транзакции, то имел в виду "Транзакция базы данных — это группа SQL-команд, обрамленная инструкциями начала и завершения".

2 Sinix , в твоей терминологии те же яйца только вид с боку - тоже запрос со свойствами ACID. Меняем запрос - меняем транзакцию.

2 АнатоЛой ,

что то Фаулер зарапортовался.

Бизнес транзакция не обязана 1:1 соотноситься с транзакцией БД. Если в бизнес транзакции выделить ряд целостных промежуточных состояний, то только переходы между этими состояниями придётся выполнять в рамках транзакции БД.
Так бизнес транзакция "заключение договора" не обязана выполняться в рамках одной транзакции БД, которая сосотоит из insert into ЗАКАЗЧИК, insert into ДОГОВОР и commit. Мы можем зарегистрировать заказчика - сделать insert into ЗАКАЗЧИК, commit, потом через некоторое время зарегистрировать договор - insert into ДОГОВОР и commit.
Понятно, что при таком подходе наличие в БД заказчика с которыми не заключен договор нужно считать нормальным явлением, и учитывать это обстоятельство в запросах.

Если угодно, можно время от времени выполнять сборку мусора, как это принято в современных средах, типа Java и C#.
...
Рейтинг: 0 / 0
Донормализовывался - караул!!! )
    #35724898
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expla
что то Фаулер зарапортовался.
Бизнес транзакция не обязана 1:1 соотноситься с транзакцией БД.


Про Фаулера сказть не могу: я же не всё цитировал - да и цитата из перевода, а не из оригинала.
Дальше по тексту видно, что речь именно о "бизнес транзакция не обязана 1:1 соотноситься с транзакцией БД" - у куча вариантов реализации...
Это просто при вырывании из большего контекста так грубо получилось, что

ФаулерДля поддержки свойств ACID бизнес-транзакции необходимо выполнить ее целиком
в рамках одной системной транзакции.

По большему куску текста "необходимо" там звучит как "можно было бы" :)
...
Рейтинг: 0 / 0
25 сообщений из 111, страница 4 из 5
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Донормализовывался - караул!!! )
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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