powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проблема сущности клиент и договор?
25 сообщений из 41, страница 1 из 2
Проблема сущности клиент и договор?
    #35889894
storysoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сущности клиент и договор связь один ко многим. У клиента с течением времени могут изменятся атрибуты адрес, фио, паспортные данные. В договоре данные атрибуты должны остаться неизменными. Подскажите как правильно организовать структуру базы данных?
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35889916
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант

Сущность клиентКодДата регистрацииВсякие параметры которые не меняются...
ДоговорыКод клиентаКодВсякие параметры для договора...

А изменяемые атрибуты клиента оформляются как-то так...

Атрибут N у клиентовКод клиентаДата измененияВсякие параметры для атрибута N...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35889973
Geep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужны три таблицы:
Клиенты, Реквизиты клиентов (с атрибутом [период]), Договоры с клиентами.
В реквизитах клиентов храните те реквизиты, которые могут со временем менятся.
В Договорах реквизиты хранить не нужно.
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35889982
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
storysoftВ договоре данные атрибуты должны остаться неизменными. Подскажите как правильно организовать структуру базы данных?
Помнить состояние клиента на дату договора.
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35890166
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тынць
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35890233
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У договора есть дата. У реквизитов есть интервал актуальности (действует от...до).
Для конкретного договора не проблема вытащить актуальный для него реквизит.
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35890329
Kirill Razuvaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>. У реквизитов есть интервал актуальности (действует от...до).
Смысл плодить лишнее? Проще "действует от", и за интервалами следить не
нужно, и заполнять проще.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35890639
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kirill Razuvaev
Проще "действует от", и за интервалами следить не нужно, и заполнять проще

тынць ( http://samouchka.net/ebooks/database/bdoracle/17681-oracle.-proektirovanie-baz-dannykh.html]Глава 7. " Обработка временных данных " )

>
>
> Posted via ActualForum NNTP Server 1.4
>
> Тема <http://www.sql.ru/forum/actualthread.aspx?tid=649987> Ответить
> <http://www.sql.ru/forum/actualpost.aspx?tid=649987> Сообщение
> <http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=649987&msg=6972445>
>


--
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35890723
Kirill Razuvaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> тынць (Глава 7. "Обработка временных данных")

Это уж разработчику решать, как...


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35890740
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftKirill Razuvaev
Проще "действует от", и за интервалами следить не нужно, и заполнять проще

тынць ( http://samouchka.net/ebooks/database/bdoracle/17681-oracle.-proektirovanie-baz-dannykh.html]Глава 7. " Обработка временных данных " )

К этому стоит добавить еще то, что в книге примеры для Oracle 7.
А на дворе уже 11g гуляет.

Не то, что бы много чего поменялось, но возможностей у Oracle с тех пор поприбавилось.
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35890823
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то подразумевалось:

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

вне контекста СУБД и, уж тем более, каких-либо версий...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35890944
Kirill Razuvaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> на практике исключать столбец DATE_TO не рекомендуется, так как это
>> приведет к необходимости использовать очень сложный и неэффективный
>> SQL-код
И давно запрос с поиском максимальной даты, меньшей определенной, стал
сложным? А эффективность - она правильной индексацией обеспечивается...


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35891038
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftВообще-то подразумевалось:

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

вне контекста СУБД и, уж тем более, каких-либо версий...На заборе много чего написано...

Про эффективность, реально померянную и оцененную: История одна дата vs две. Что лучше?

Так что не все так однозначно, как в книжке пишут.
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35891070
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kirill Razuvaev
И давно запрос с поиском максимальной даты, меньшей определенной, стал сложным?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select
   Contract.*,
   Contragent.*,
   Doc.*,
   Vehicle.*
from
   Contract
   join Contragent on (Contragent.Id=Contract.ContragentId)
   join Doc on (Doc.Id=Contragent.DocId)
   join Vehicle on (Vehicle.Id=Contract.VehicleId)
where
   (ContractId=SmthValue)
   and (Contract.Date between Contragent.DateFrom and Contragent.DateTo)
   and (Contract.Date between Doc.DateFrom and Doc.DateTo)
   and (Contract.Date between Vehicle.DateFrom and Vehicle.DateTo)
и таких join'ов с десяток... Покажите Ваш несложный запрос с поиском максимальной даты хотя бы для выше указанного...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35891174
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bely
Про эффективность, реально померянную и оцененную: История одна дата vs две. Что лучше?

Не показательно... Табличка всего одна... А если много? BTW,
MasterZiv
(на самом деле конечно не такой он и сложный, но если его вложить в другие запросы которые уже реально с данными работать будут, будет совсем невесело)

Bely
Так что не все так однозначно, как в книжке пишут.

У нас, как раз, ситуация "с точностью до наоборот": на практике дошли к тому, что позже в букварях прочитали...

off
Такое ощущение, что все сдесь крутиться вокруг трех китов: и тут вылезли null значения

_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35891187
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
Kirill Razuvaev
И давно запрос с поиском максимальной даты, меньшей определенной, стал сложным?
Покажите Ваш несложный запрос с поиском максимальной даты хотя бы для выше указанного...
А почему именно в таком виде все должно обязательно быть с точки зрения проектирования?
Может достаточно ограничиться только датой "От", а в договоре сохранять ссылку на периодические реквизиты? То есть, запрос последней строки будет обычным select top 1 order by, а потом уже никаких подзапросов не будет, просто прямой join на периодический реквизит, с которым связан договор.
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35891256
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов
А почему именно в таком виде все должно обязательно быть с точки зрения проектирования?

Ну... Нам так надо... Так спроектировали... Что-то криминальное?
Сергей Васкецов
Может достаточно ограничиться только датой "От", а в договоре сохранять ссылку на периодические реквизиты? То есть, запрос последней строки будет обычным select top 1 order by, а потом уже никаких подзапросов не будет, просто прямой join на периодический реквизит, с которым связан договор.

Предлагаете винегрет (В.1. + В.2.)?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35891277
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftПредлагаете винегрет
Скорее просто указываю, что из отсутствия поля "До" еще не следуюет, что придется колупаться с подзапросами типа select max или not exists вместо Ваших between.
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35891345
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов
из отсутствия поля "До" еще не следуюет, что придется колупаться с подзапросами типа select max или not exists вместо Ваших between

А смысл скрещивать ужа и ежа, в принципе, IMHO, вполне самодостаточных варианта:
1. Ид на актуальную info
2. временнЫе параметры
попутно внося специфичные для каждого грабли в общий котел и еще больше все усложняя?

P.S. Вариант 1 сдесь вообще не обсуждался. Видать его даже за вариант не считают...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35891966
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftА смысл скрещивать ужа и ежа
Да это пусть автор думает. Я в подобной ситуации сделал бы ссылку в договоре на актуальные параметры, в которых дата была бы просто как второе поле уникального ключа. И все проверки есть, и блокировка правки заюзанного легко делается, и запросы простые. В общем, тут же нет причин все усложнять.
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35892011
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецовблокировка правки заюзанного легко делаетсяКак?
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35892134
Kirill Razuvaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Softи таких join'ов с десяток... Покажите Ваш несложный запрос с поиском максимальной даты хотя бы для выше указанного...Речь о том, что ссылку на нужную версию периодических реквизитов можно получить запросом типа:
Код: plaintext
1.
select max(C.GenID) from Contragents C
where C.StartDate<:ContractDate and C.ContragentID=:ContractID
который достаточно эффективен при наличии desc индекса по двум полям. Аналог можно и к join'ам добавить.
IMHO, такие выборки быстрее between. Да и разрывы/перекрытия диапазонов больше шансов получить при многопользовательской работе и одновременной правке реквизитов.
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35892190
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е., таки, сходимся к комбинированному варианту:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select
   max(C.GenID)
from
   Contragents C
where
   (C.RecordModify<:ContractDate)
   and (C.ContragentID=:ContractID)
???
не тяжеловато ли будет а-ля:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
    Contract.*,
    Contragent.*,
    Doc.*,
    Vehicle.*
from
    Contract
    join Contragent on (Contragent.Id=select max(Id) from Contragent where RecordModify<Contract.Date and Id=Contract.ContragentId)
    join Doc on (Doc.Id=select max(Id) from Doc where RecordModify<Contract.Date and Id=Contragent.DocId)
    join Vehicle on (Vehicle.Id=select max(Id) from Vehicle where RecordModify<Contract.Date and Id=Contract.VehicleId)
where
    (ContractId=SmthValue)
???
Даже не уверен, что отработает...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35892922
Kirill Razuvaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> не тяжеловато ли будет а-ля:
Ну, полный список всех договоров со всеми (!) join'ами - редкое явление...
или ошибка проектирования :-)

>> Даже не уверен, что отработает...
Куда ж оно денется... В конце концов, можно куда-нибудь завернуть по частям,
в просмотры, процедуру...
IMHO, такой вариант "периодики" даже визуально контролировать проще...


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема сущности клиент и договор?
    #35892986
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kirill Razuvaev
Ну, полный список всех договоров со всеми (!) join'ами - редкое явление...

отчетность

Kirill Razuvaev
или ошибка проектирования

а как тогда по другому (если без смайла)?
Kirill Razuvaev
в процедуру...

Ну и как потом если что-то сводное? Особенно, если select from stored_procedure нЭт?
Kirill Razuvaev
Куда ж оно денется...

Не... Ну это - понятно... Только, вот, если один сервак вообще на все и вся и юзверов порядочно - то, если честно, сомнение гложет...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проблема сущности клиент и договор?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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