powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Шаблоны применения
57 сообщений из 57, показаны все 3 страниц
Шаблоны применения
    #35696021
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю собрать шаблоны применения. Начну с

Шаблон: Периодические сведения
Позволяет хранить данные, зависимые от периода.

Структура:
Код: plaintext
1.
2.
3.
4.
UID:UID уникальный ключ 
BeginPeriod: date/datetime not null. Начало актуальности сведений.
EndPeriod: date/datetime Конец актуальности сведений.
<Измерения> Разрезы, в которых ведутся сведения
<Ресурсы> Сведения

Индекс: <Измерения>, BeginPeriod, EndPeriod
уникальный

Методы выборки:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Slice(Point:date/datetime): table(object, <Измерения>, <Ресурсы>)
//срез сведений по всем измерениям на дату/время Point
Select object, <Измерения>, <Ресурсы>
From <ПериодическиеСведения>
Where Point between BeginPeriod and EndPeriod

DimensionSlice(Point:date/datetime, dimension:<Измерения>) : object,<Ресурсы>
//срез сведений по одному набору измерений на дату/время Point
Select object,<Ресурсы>
From <ПериодическиеСведения>
Where (Point between BeginPeriod and EndPeriod) and (<Измерения>=dimension)
Триггеры:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
OnAfterInsert
//вставка нового значения
CurrentRes := DimensionSlice(new.Point, new.<Измерения>);
If CurrentRes.object is null then
	new.EndPeriod := null
else begin
	update CurrentRes.object 
	set EndPeriod := new.BeginPeriod; 	
	new.EndPeriod := CurrentRes.EndPeriod;
end;
	
OnAfterDelete
//удаление значения
CurrentRes := DimensionSlice(old.Point, old.<Измерения>); 
If not CurrentRes.object is null then
	update CurrentRes.object 
	set EndPeriod := old.EndPeriod; 
...
Рейтинг: 0 / 0
Шаблоны применения
    #35696429
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Naf,
первое предложение: заменить термин "шаблоны применения" на "шаблоны проектирования". Привычней как-то ...
...
Рейтинг: 0 / 0
Шаблоны применения
    #35696461
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senya_LNaf,
первое предложение: заменить термин "шаблоны применения" на "шаблоны проектирования". Привычней как-то ...
Ну пусть проектирования, но стандартный набор шаблонов проектирования (если можно сравнивать) как бы выше в уровне абстракции
...
Рейтинг: 0 / 0
Шаблоны применения
    #35696470
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_LNaf,
первое предложение: заменить термин "шаблоны применения" на "шаблоны проектирования". Привычней как-то ...

Вроде как "паттерн проектирования" устояшнийся термин. Хотя мне приятнее "шаблон проектирования".
...
Рейтинг: 0 / 0
Шаблоны применения
    #35696512
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не важно...
Это шаблоны для конструирования баз данных.
Данный шаблон может применяться, например, для курсов валют или цен товаров.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35696515
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NafПредлагаю собрать шаблоны применения. Начну с



1. Не ты первый. Поищи по форуму.

2. На каком языке ты пишешь?

3. То что ты написал разве будет работать? Я думаю нет.

4. А чем Period не "измерение"?
...
Рейтинг: 0 / 0
Шаблоны применения
    #35696523
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expla
1. Не ты первый. Поищи по форуму.
2. На каком языке ты пишешь?
3. То что ты написал разве будет работать? Я думаю нет.
4. А чем Period не "измерение"?
1. знаю, собираю в коллекцию
2. на некотором псевдо SQL. Но это отдельная тема
3. будет работать, если перенести в реальный SQL
4. это особое измерение. Его стоит выделить отдельно, потому что в нем вся соль. Хотя бы сравнения с ним другие
...
Рейтинг: 0 / 0
Шаблоны применения
    #35696525
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explaВроде как "паттерн проектирования" устояшнийся термин. Хотя мне приятнее "шаблон проектирования".Ну вот и договорились, осталось шаблонов накидать :)

ЗЫ. К заимствованным словам отношение нормальное, но именно на "паттерн" аллергия почему то
...
Рейтинг: 0 / 0
Шаблоны применения
    #35697588
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
NafПредлагаю собрать шаблоны применения.
Меня интересует смысл этих шаблонов и область применения
========
P.S. Мне тоже не нравится слово "паттерны"
...
Рейтинг: 0 / 0
Шаблоны применения
    #35698207
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2NafПредлагаю собрать шаблоны применения.
Меня интересует смысл этих шаблонов и область применения
========
P.S. Мне тоже не нравится слово "паттерны"Смысл, скорее, педагогический. Или методологический. Как пример шаблона Things that change with time . Хотя по первому прочтению показалось далеким от практики. Может надо еще почитать? ;)

Я думаю, будут интереснее, например, как разруливать ситуацию с изменением имени персоны на уровне проектирования БД.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35699498
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2NafПредлагаю собрать шаблоны применения.
Меня интересует смысл этих шаблонов и область применения
========
P.S. Мне тоже не нравится слово "паттерны"

Это шаблон применяется (поэтому "применения") для создания периодических сведений с историей. Примеры: таблица курсов валют, Цены товаров, Состояний сотрудников (Принят, Уволен)
...
Рейтинг: 0 / 0
Шаблоны применения
    #35699647
Фотография BULK INSERT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafСостояний сотрудников (Принят, Уволен)


принят/уволен - ни разу не "состояние сотрудника"
...
Рейтинг: 0 / 0
Шаблоны применения
    #35699654
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BULK INSERT, ну хотя бы физ. лица по отношению к организации
...
Рейтинг: 0 / 0
Шаблоны применения
    #35700506
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NafBULK INSERT, ну хотя бы физ. лица по отношению к организации

Отошения физ. лиц с организацией (работодателем), регламентируются трудовым договором, записью в трудовой книжке, честным словом, наконец. Т.е. эта связь определяется не атрибутом физ.лица и не атрибутом работодателя, а отдельной сущностью.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35700522
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explaNafBULK INSERT, ну хотя бы физ. лица по отношению к организации

Отошения физ. лиц с организацией (работодателем), регламентируются трудовым договором, записью в трудовой книжке, честным словом, наконец. Т.е. эта связь определяется не атрибутом физ.лица и не атрибутом работодателя, а отдельной сущностью.
Ну не знаю, ребята...
Курсы валют для отражения в бух. учете регламентируются центробанком (поправьте если не так)
Цены - приказом о ценах или прайс-листом, заверенным печатью и подписью соответствющих лиц
...
Рейтинг: 0 / 0
Шаблоны применения
    #35700544
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_LЯ думаю, будут интереснее, например, как разруливать ситуацию с изменением имени персоны на уровне проектирования БД.

Да просто не надо из сущности удалять атрибуты. Если в договоре есть графа "Ф.И.О.", то и в таблице "Договор" она должна быть. А то, блин, вместо поля "Договор"."Ф.И.О." создают поле "Договор"."ID_ЛИЦА", а потом думают, что будет с договором, если "ЛИЦО", поменяет своё "ФИО" ...

Если чел. меняет Ф.И.О., то он должен перезаключить договор. В новом договоре будет новое Ф.И.О., а в старом останется старое Ф.И.О.. Тогда в таблице "ЛИЦО", можно будет заменить "Ф.И.О." простым UPDATE.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35700575
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expla, должен перезаключить договор
будьте реалистом: требования бизнес-процессов говорят о другом.
К примеру, девушка вышла замуж, сменила фамилию. Думаете она бегать будет по всем компаниям (ЖЭК, телефон, интернет и т.д.) чтоб перезаключить договор?
ФИО в данном случае и есть периодические сведения
...
Рейтинг: 0 / 0
Шаблоны применения
    #35700633
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nafexpla
1. Не ты первый. Поищи по форуму.

1. знаю, собираю в коллекцию


Так поищи коллекционеров...

ИМХО, по современным меркам подход не верный. БД по сути явление вторичное. Сначала (по крайней в наше время) проектируются классы и кооперации. Выделяются persistent (хранимые) классы. Для хранения этих классов проектируется БД.

Интересно увидеть подходы к реализации в реляционной или объектно-реляционной БД тех или иных конструкций UML. Кроме того, выявлен ряд типовых ситуаций (сейчас наверное около сотни) для которых разработаны паттерны (бррр) проектирования. Думаю, под эти паттерны тоже можно придумать структуры реляционной или объектно-реляционной БД.

Для UML ситуация повторяется как для ER моделирования. Только ER модели были сильно привязаны к возможностям СУБД тех лет, UML больше ориентирован на разработку системы, частью которой может быть БД.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35700814
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторБД по сути явление вторичное
Судимости тоже нужно связывать по фамилиям.Так можно и без вторичных признаков остаться, с одним UML'ом
...
Рейтинг: 0 / 0
Шаблоны применения
    #35700931
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nafexpla, должен перезаключить договор
будьте реалистом: требования бизнес-процессов говорят о другом.
К примеру, девушка вышла замуж, сменила фамилию. Думаете она бегать будет по всем компаниям (ЖЭК, телефон, интернет и т.д.) чтоб перезаключить договор?
ФИО в данном случае и есть периодические сведения

Бегать не надо, но как только встанет вопрос об урегулировании каких либо отношений, договор придётся перезаключить или как то иначе документально оформить изменение фамилии, паспорта и т.д.. По крайней мере, для выезда за границу загранпаспорт придётся поменять. При продаже квартиры документы тоже придётся выправить, иначе в договоре купли продажи продавцом будет лицо которому по документам квартира не принадлежит.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35700985
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
expla,
Трудовой договор, например, не перезаключается. В нем делаются отметки о смене удостоверяющего личность документа, ФИО, пола ( :) )
...
Рейтинг: 0 / 0
Шаблоны применения
    #35701000
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2expla,
Трудовой договор, например, не перезаключается. В нем делаются отметки о смене удостоверяющего личность документа, ФИО, пола ( :) )

Можно и так, но первоначальное Ф.И.О. всё равно в нём не изменится.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35701061
Фотография GUESТ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

аналогично и договоры с юр.лицами после смены у них ген.дира
...
Рейтинг: 0 / 0
Шаблоны применения
    #35701291
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут говорил про смену фамилии потому, что интересно как это реализуют другие. Честно скажу, лень расписывать по шаблону автора топика, но идея такая.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create table Person(
  idPerson  int, -- PK
  Surname  varchar( 30 ),
  Name  varchar( 20 ),
  Secname varchar( 25 ),
  idPrevious int, -- FK
  StartDate  dateTime
)
Я думаю, идея понятна. Достаточно универсально, но и приходится при выборках в запросах изгаляться, в том числе и использовать CTE. Правда, нечасто, в основном требуется выводить фамилию персоны, сделавшей подпись и иногда в скобках приписать текущую фамилию. Как это решается у других - интересно, на идеал не претендую
...
Рейтинг: 0 / 0
Шаблоны применения
    #35702581
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_L, не очень понятно. Где та сущность в которой фамилия должна (не) измениться?
...
Рейтинг: 0 / 0
Шаблоны применения
    #35702649
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_LЯ тут говорил про смену фамилии потому, что интересно как это реализуют другие. Честно скажу, лень расписывать по шаблону автора топика, но идея такая.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create table Person(
  idPerson  int, -- PK
  Surname  varchar( 30 ),
  Name  varchar( 20 ),
  Secname varchar( 25 ),
  idPrevious int, -- FK
  StartDate  dateTime
)


Если убрать сурогатный обвес, то останется

Код: plaintext
1.
2.
3.
4.
create table Person(
  Surname  varchar( 30 ),
  Name  varchar( 20 ),
  Secname varchar( 25 )
)

Т.е. таблица, состоящая из одного только первичного ключа. Такие таблицы как правило не нужны совсем. Да и не Person это на самом деле. Это скорее Person_ID, коих у реального человека может быть много (ФИО на национальном языке, девичья ФИО, ФИО в n'ом браке, ФИО в загранпаспорте МВД, ФИО в загранпаспорте МИД, ФИО в международном водительском удостоверении, ФИО в авиабилете билете (допускают три ошибки), ...).
Если речь о том, чтобы длинным значениям (Surname, Name, Secname) присвоить короткие номера -Id (сделать типа словаря), то нужно просто запретить изменение Id и этих полей в таблице.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35703317
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expla,

Вы меня не поняли. Да и я был немногословен. :) Поясняю.

В таблице сущность "Персона" не изменяется, а дополняется. Поле idPrevious содержит ссылку на Person.idPerson, где содержатся данные до смены фамилии/имени/(да можно и отчества:)). Зря вы idPrevous выкинули в "суррогатный" обвес.
Что то наподобии древа, но на idPerson накладывается уникальный индекс и, в результате, получаем связанный список. Все "ипостаси" личности (не знаю я как назвать совокупность атрибутов имя/фамилия назвать) хранятся в таблице, вместе со ссылками на предыдущую.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35703395
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
триада ( Name, Surname, Secname ) не может быть первичным ключём, бывают, знаете-ли, полные тёзки
...
Рейтинг: 0 / 0
Шаблоны применения
    #35703501
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_L,

я не вижу смысла выстраивать цепочки из ФИО, ведь чел может одновременно называть себя или проходить по документам и Ивановым и Петровым.

ИМХО, должно быть личное дело человка (типа таблица) и к этой таблице прицеплены разные учётные данные, такие как многочисленные ФИО (старые, новые, в разных транслитерациях, подтверждённые документально или предполагаемые системой выявления мошенников и т.п.).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
table Личное_дело (
  ID,
  <текущие данные>
) ;

table ФИО (
   фамилия,
   имя ,
   отчество,
   личное_дело references личное_дело,
   unique (личное_дело, фамилия, имя,отчество)
);

ФИО может содержать и другие данные, которые обычно используются в документах. ФИО может быть представлением (и материализованным), из разных документов, в которых фигурируют персональные данные и есть ссылка на личное дело.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35703511
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
egorychтриада ( Name, Surname, Secname ) не может быть первичным ключём, бывают, знаете-ли, полные тёзки

Смотря в каком реляционном отношении. В таблице паспортов - согласен. В таблице/справочнике имён - почему бы нет?
...
Рейтинг: 0 / 0
Шаблоны применения
    #35703553
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explaSenya_L,

я не вижу смысла выстраивать цепочки из ФИО, ведь чел может одновременно называть себя или проходить по документам и Ивановым и Петровым.Одновременно человек не может называть себя двумя фамилиями. Равно как и иметь разные паспорта. Зато он может в различные промежутки времени обладать, например, правом подписи и как Иванов, и как Петров.

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

я не вижу смысла выстраивать цепочки из ФИО, ведь чел может одновременно называть себя или проходить по документам и Ивановым и Петровым.Одновременно человек не может называть себя двумя фамилиями.

Ты плохо знаешь людей. А серьёзно, смена фамилии процедура сложная и длительная. И система некоторое время должна принимать человека и с его старой фамилией и с новой, а в архивных документах старая фамилия может отаться навеки. Может быть ты пытаешься притянуть сюда жизненный цикл паспорта. Типа, старый паспорт изымают, новый выдают. Но даже в этом случае чел может потерять паспорт, потом найти его и нелегально пользоваться.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35703728
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senya_Lгде может быть те же фамилия/имя, но латиницей. С таким случаем дела не имел и, имхо, его надо рассматривать как особый.

пример, кстати, любопытный - правила написания имен латиницей не совпадают с обычными правилами прочтения фамилии на иностранных языках - это особая нотация - здравым смыслом не берется, фамилии при прочтении бывают даже не созвучны

т.е. можно сказать что это те же фамили и имя того же человека, только вот и визуально и аудиально они могут не совпадать ни разу...

арабские, французские, русские имена и фамилии
примеры приводить не стану - попалюсь пулей
...
Рейтинг: 0 / 0
Шаблоны применения
    #35703732
Фотография proposed amendment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имелось в виду "в загран.паспортах и визах зарубежных иноязычных стран"
...
Рейтинг: 0 / 0
Шаблоны применения
    #35703779
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explaМожет быть ты пытаешься притянуть сюда жизненный цикл паспорта. Не то что притянуть, а именно в соответствии с паспортом и должен фигурировать человек в документах, либо на основании документа его заменяющего. Случай мошеничества не рассматривается.

Вообще, что мы к этим паспортам привязались, в самом деле. Давайте на вопрос смотреть ширше :) Допустим, назовем шаблон "Сущности с изменяемыми атрибутами". Это могут данные о руководителе отдела, это цены на проданные товары, это ... список можно продолжать долго. Но всех их объединяет то, что при выборке важно знать состояние сущности на определенный интервал времени. Сразу же укажу альтернативный способ решения: лог изменений. Мне лично больше нравится вышеуказанный подход. Однако, могу указать и слабые места. Во-первых, можно получить значительное падение производительности в случае когда атрибуты изменяются очень часто. Во-вторых, на СУБД, где операции с курсором "дороги" есть вероятность "тормозов", когда не получается уложиться в один запрос.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35703793
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafДанный шаблон может применяться, например, для курсов валют или цен товаров.Кстати, хотелось бы покритиковать этот шаблон. В нем трудно организовать CONSTRAINT на непересекаемость интервалов.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35703870
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_LexplaМожет быть ты пытаешься притянуть сюда жизненный цикл паспорта. Не то что притянуть, а именно в соответствии с паспортом и должен фигурировать человек в документах, либо на основании документа его заменяющего.

Это твои фантазии. Документы могли быть составлены хрен знает когда, так что ни паспорта ни документа его заменяющего, который использовался при составлениии документов, уже не существует в природе.


Senya_L Случай мошеничества не рассматривается.

Напрасно. Тогда система не жизненная будет. Сферический конь в вакууме.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35703876
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_LNafДанный шаблон может применяться, например, для курсов валют или цен товаров.Кстати, хотелось бы покритиковать этот шаблон. В нем трудно организовать CONSTRAINT на непересекаемость интервалов.

Да он вообще то не рабочий.

В контексте триггера OnAfterInsert функция DimensionSlice(new.Point, new.<Измерения>) на оракле будет поднимать исключение, типа таблица мутирует.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35704405
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explaДа он вообще то не рабочий.

В контексте триггера OnAfterInsert функция DimensionSlice(new.Point, new.<Измерения>) на оракле будет поднимать исключение, типа таблица мутирует. Да что вы чУдите бесплатно! Автор привел образец врменного "среза" в SELECT'е, а не пример использования в Оракле.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35704420
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senya_L,
Да избыточность имеет место. Ограничения с помощью триггеров. Запросы на изменения не должны на прямую содержать значения EndPeriod.
Можно привести реализацию этого же шаблона без избыточности. Конец периода - начало следующего. Но Select там гораздо сложнее.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35704463
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafSenya_L,
Да избыточность имеет место. Ограничения с помощью триггеров. Запросы на изменения не должны на прямую содержать значения EndPeriod.
Можно привести реализацию этого же шаблона без избыточности. Конец периода - начало следующего. Но Select там гораздо сложнее.Не совсем избыточность. Я тут подумал, все же EndPeriod нужен, если периоды не стыкуются и есть "разрывы".
NafНо Select там гораздо сложнее.В случае, например, изменения цен на товар ни капли не сложней. В заказе будет содержаться ссылка на ID правильной записи, и дальше - просто, чисто конкретный, JOIN :)
...
Рейтинг: 0 / 0
Шаблоны применения
    #35706098
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NafSenya_L,
Да избыточность имеет место. Ограничения с помощью триггеров. Запросы на изменения не должны на прямую содержать значения EndPeriod.
Можно привести реализацию этого же шаблона без избыточности. Конец периода - начало следующего. Но Select там гораздо сложнее.

Нет там избыточности. Интервал, это два значения - начало и конец. То, что начало интервала может быть концом какого то другого интервала, это уже правило, внешнее по отношению к БД. Т.е. в случае хранения в записи начала и конца избыточным является это правило.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35706106
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Senya_LexplaДа он вообще то не рабочий.

В контексте триггера OnAfterInsert функция DimensionSlice(new.Point, new.<Измерения>) на оракле будет поднимать исключение, типа таблица мутирует. Да что вы чУдите бесплатно! Автор привел образец врменного "среза" в SELECT'е, а не пример использования в Оракле.

Тогда пусть автор потрудится объяснить, что такое OnAfterInsert. И нафига такой шаблон, который неприменим к ораклу.
...
Рейтинг: 0 / 0
Шаблоны применения
    #35742274
Фотография Папа Игорь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

К. Дж. Дейт "Введение в системы баз данных"

ISBN 5-8459-0788-8 (рус.)

Стараницы 915 - 970.

Это не подходит?
...
Рейтинг: 0 / 0
Шаблоны применения
    #36341163
Salimbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В AlData GOLD (собственно от AlData) и SAP for Retail (приезжали из Alpe consulting) используется именно этот механизм. Все действующие сейчас атрибуты обладают кроме даты начала еще и датой окончания. По умолчанию 2054г. Как происходит изменение, то Дата окончания обновляется указанной датой и создается новая запись с Датой начала = НашаДата и Дата окончания = 2054 г.
З.Ы. Для тех кто не в теме - это, типа, лучшие мировые решения в розничной торговле.
...
Рейтинг: 0 / 0
Шаблоны применения
    #36341192
Umberto_Eco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SalimbekВ AlData GOLD (собственно от AlData) и SAP for Retail (приезжали из Alpe consulting) используется именно этот механизм. Все действующие сейчас атрибуты обладают кроме даты начала еще и датой окончания. По умолчанию 2054г. Как происходит изменение, то Дата окончания обновляется указанной датой и создается новая запись с Датой начала = НашаДата и Дата окончания = 2054 г.
З.Ы. Для тех кто не в теме - это, типа, лучшие мировые решения в розничной торговле.А в каком виде хранятся атрибуты? Это самое интересное.
...
Рейтинг: 0 / 0
Шаблоны применения
    #36341390
Salimbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Umberto_EcoА в каком виде хранятся атрибуты? Это самое интересное.
К сожалению это были лишь презентации, детально пощщупать базы не удалось. Тут есть более детальные комментарии: http://www.1cpp.ru/forum/YaBB.pl?num=1223470922/1
...
Рейтинг: 0 / 0
Шаблоны применения
    #36341440
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Для тех кто не в теме - это, типа, лучшие мировые решения в розничной торговле.

Обычное дерьмо. Эпитет "лучший" применим исключительно к технологии вытрясания бабла из клиента.
...
Рейтинг: 0 / 0
Шаблоны применения
    #36341546
Salimbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621> Для тех кто не в теме - это, типа, лучшие мировые решения в розничной торговле.

Обычное дерьмо. Эпитет "лучший" применим исключительно к технологии вытрясания бабла из клиента.
Ну, список внедрений внушаит, например у АлДата:
Carrefour - France and International, Retail, Grocery
Casino - France and International, Retail, Grocery
Leclerc Lecasud - France, Retail, Grocery
Migros - Switzerland, France and Germany, Retail, Grocery and Non-Food
Tesco - Central Europe, Retail, Grocery
Это из тех сетей, которые в 20-ку лучших в мире входят
...
Рейтинг: 0 / 0
Шаблоны применения
    #36341651
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Это из тех сетей, которые в 20-ку лучших в мире входят

Т. е. таких, из которых есть смысл вытрясать бабло, ибо оно у них есть. Логично.

Связь между технологичностью, правильностью решения и степенью его распространения скорее обратная: чем более тупо и криво, тем охотнее покупают и используют.
...
Рейтинг: 0 / 0
Шаблоны применения
    #36342060
Salimbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я выше приводил ссылку... немного тут процитирую:
lustin 1c++ power user
...значит архитектура данной быдло поделки трезвенная якобы, на самом деле с клиента через сервер приложений проходят прямые запросы к базе данных

база данных Oracle - структура настолько избыточная, что ужас

сервером приложений живет немного "допиленный" Tomcat - и нужен он только для выполнения регламентных заданий , вся бизнес логика выполняется в рамках клиента
... и т.д.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Шаблоны применения
    #37447368
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafПредлагаю собрать шаблоны применения. Начну с

Шаблон: Периодические сведения
Позволяет хранить данные, зависимые от периода.

Структура:
Код: plaintext
1.
2.
3.
4.
UID:UID уникальный ключ 
BeginPeriod: date/datetime not null. Начало актуальности сведений.
EndPeriod: date/datetime Конец актуальности сведений.
<Измерения> Разрезы, в которых ведутся сведения
<Ресурсы> Сведения

Индекс: <Измерения>, BeginPeriod, EndPeriod
уникальный

Методы выборки:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Slice(Point:date/datetime): table(object, <Измерения>, <Ресурсы>)
//срез сведений по всем измерениям на дату/время Point
Select object, <Измерения>, <Ресурсы>
From <ПериодическиеСведения>
Where Point between BeginPeriod and EndPeriod

DimensionSlice(Point:date/datetime, dimension:<Измерения>) : object,<Ресурсы>
//срез сведений по одному набору измерений на дату/время Point
Select object,<Ресурсы>
From <ПериодическиеСведения>
Where (Point between BeginPeriod and EndPeriod) and (<Измерения>=dimension)
Триггеры:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
OnAfterInsert
//вставка нового значения
CurrentRes := DimensionSlice(new.Point, new.<Измерения>);
If CurrentRes.object is null then
	new.EndPeriod := null
else begin
	update CurrentRes.object 
	set EndPeriod := new.BeginPeriod; 	
	new.EndPeriod := CurrentRes.EndPeriod;
end;
	
OnAfterDelete
//удаление значения
CurrentRes := DimensionSlice(old.Point, old.<Измерения>); 
If not CurrentRes.object is null then
	update CurrentRes.object 
	set EndPeriod := old.EndPeriod; 


Код: plaintext
Where (Point between BeginPeriod and EndPeriod) 
- не совсем понял, если в базе EndPeriod текущий == NULL, то при операциях сравнения он не учитывается и, автоматически, если Point в текущем периоде, выборка из базы ничего не вернет.
Или я неправильно что то понял?
...
Рейтинг: 0 / 0
Шаблоны применения
    #37447415
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычно для периодических сведений отсутствие даты слева/справа понимается как открытая границы. Если обе даты отсутствуют, то значение действует всегда, если нет даты слева - то до даты справа включительно и т.п. В практическом SQL вместо сравнения с датами можно ставить ISNULL(дата, <заведомо маленькая дата> | <заведомо большая дата>) чтобы значения попадали в выборку. Для понимания логики шаблона приведенного псевдо sql достаточно.
...
Рейтинг: 0 / 0
Шаблоны применения
    #37447555
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любитель, спасибо за разъяснение.
Но все-таки, по-моему как-то не красиво и гораздо проще при вставке использовать именно эту самую заведомо большУю дату.
И тогда уже обойтись без совершенно ужасных WHERE предложений, типа

Код: plaintext
WHERE Point>=Sdate AND Point <= Nz(Edate,  2200 - 01 - 01 )
...
Рейтинг: 0 / 0
Шаблоны применения
    #37447939
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинПрограммист-Любитель, спасибо за разъяснение.
Но все-таки, по-моему как-то не красиво и гораздо проще при вставке использовать именно эту самую заведомо большУю дату.
И тогда уже обойтись без совершенно ужасных WHERE предложений, типа

Код: plaintext
WHERE Point>=Sdate AND Point <= Nz(Edate,  2200 - 01 - 01 )
Согласен, можно даже заранее писать туда не NULL, а заведомо невозможную дату
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Шаблоны применения
    #39173816
Sasha87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafТриггеры:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
OnAfterInsert
//вставка нового значения
CurrentRes := DimensionSlice(new.Point, new.<Измерения>);
If CurrentRes.object is null then
	new.EndPeriod := null
else begin
	update CurrentRes.object 
	set EndPeriod := new.BeginPeriod; 	
	new.EndPeriod := CurrentRes.EndPeriod;
end;
	
OnAfterDelete
//удаление значения
CurrentRes := DimensionSlice(old.Point, old.<Измерения>); 
If not CurrentRes.object is null then
	update CurrentRes.object 
	set EndPeriod := old.EndPeriod; 



new.Point, old.Point
От куда берутся эти значения? У записи по структуре нет поля Point.
...
Рейтинг: 0 / 0
Шаблоны применения
    #39173830
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sasha87new.Point, old.Point
От куда берутся эти значения? У записи по структуре нет поля Point.

Действительно, на самом деле
Код: sql
1.
Point = BeginPeriod
...
Рейтинг: 0 / 0
57 сообщений из 57, показаны все 3 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Шаблоны применения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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