powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Подскажите как оптимально спроектировать
10 сообщений из 10, страница 1 из 1
Подскажите как оптимально спроектировать
    #34132693
LeKo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть главная таблица tFIO (id, fio)
с ней связана таблица местопроживания tAbode (id_fio, address, dates), где dates - дата начала проживания. В этой таблице будут храниться все адреса проживания какие были. Т.е. связь между таблицами один ко многим.
Необходимо спроектировать так, чтобы можно было быстро узнать последнее местопроживания человека. База будет реализовано либо на Visual FoxPro либо на MS SQL.
Если рассматривать приведенные структуры таблиц (допустим возьмем реализацию на VFP), то нахождение последнего места проживания довольно утомительно, т.к. надо сравнивать все записи для нахождения максимальной datas. Я вот думаю, может для ускорения поиска, ввести дополнительное логическое поле в tAbode, где б значение true указывало текущее местожительство, но тогда затрудняется добавление(редактирование) записей. Может быть что-нибудь подскажите?
...
Рейтинг: 0 / 0
Подскажите как оптимально спроектировать
    #34132892
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых непонятно,что это такое в foxpro особенное,если в нем можно также сделать select max по дате, особенно если по полю построен индекс - такое ощущение,что Вы в курсоре искать макс собираетесь.
второе-ну хочется вам ввести поле в адреса - введите и на триггере при простановке этого поля очищайте эти флаги в остальных записях
третье - могу предложить пример мега-маразма: добавьте id на таблицу мест проживания (это стопудово понадобится в любом случае) и выбирайте запись с max id для этого человека, правда чем это отличается от макс даты - не ясно.
четвертое - можно в человеке сделать ссылку на таблицу с адресами а-ля id текущего адреса проживания и прямо в форме его редактирования ее выставлять, собственно тогда задача поиска - выбор из таблицы адресов записи с id (вот он и понадобился :))=id_current_place (типа id тек места) в человеке
...
Рейтинг: 0 / 0
Подскажите как оптимально спроектировать
    #34133138
LeKo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shtockможно также сделать select max по дате
дык правильно, но получается то не очень быстро:
1) найдем Maxdate: select max по дате
2) найдем Address соотв MaxDate: select adres where datas = maxdata

Shtockхочется вам ввести поле в адреса - введите
Shtockможно в человеке сделать ссылку на таблицу с адресами
Если учитывать что таблица адресов намного больше таблицы человеков, то второй вариант выбрать предпочтительнее, но если учесть что будут еще связанные таблицы, навроде таблицы адресов, то получается надо добавлять для каждой таблицы соответствующее поле в таблицу человеков.
Разве никто не сталкивался с ситуациями, когда требуется хранить некую историю, но в тоже время необходим механизм быстрого получения последних данных?
Какой вариант выбрать?
...
Рейтинг: 0 / 0
Подскажите как оптимально спроектировать
    #34133275
LeKo Shtockможно также сделать select max по дате
дык правильно, но получается то не очень быстро:
1) найдем Maxdate: select max по дате
2) найдем Address соотв MaxDate: select adres where datas = maxdata

А можно сделать так:
Код: plaintext
1.
2.
3.
4.
select adres,datas 
   from <таблица адресов> 
       where <критерий отбора по человеку> 
            order by datas desc
Тогда первая запись будет последней по времени....
...
Рейтинг: 0 / 0
Подскажите как оптимально спроектировать
    #34133335
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
собственно сглючил и не туда ответил, но

p.s. был бы рад если модераторы бы перенесли ответ в эту тему
...
Рейтинг: 0 / 0
Подскажите как оптимально спроектировать
    #34133384
LeKo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав, а предположим мне надо выбрать адреса 1000 определенных человек, то для каждого человека мне надо будет выполнять приведенный Вами select...а если эта таблица содержит миллионы записей!?

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

Но я хотел бы узнать в общем как правильно организовывается структура таблиц в таких случаях, не вдаваясь в подробную реализацию
...
Рейтинг: 0 / 0
Подскажите как оптимально спроектировать
    #34133410
LeKo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Shtock
Код: plaintext
1.
2.
select max(b.dt)
FROM test_people a, test_work_people b
where a.id= 1 

Вы только определяете последнюю дату, а ведь не адрес!?
...
Рейтинг: 0 / 0
Подскажите как оптимально спроектировать
    #34133602
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин,в foxpro нормальный sql.Зачем seek нужен то?


select b.id_work
from
(
select max(b.dt) dt,id_people
FROM test_work_people b
group by id_people
) gr,
test_work_people b
where b.id_people=gr.id_people and
gr.dt=b.dt
...
Рейтинг: 0 / 0
Подскажите как оптимально спроектировать
    #34133628
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select b.id_work
from test_work_people b
where b.dt=(
select max(b2.dt)
from test_work_people b2
where b2.id_people=b.id_people
)
...
Рейтинг: 0 / 0
Подскажите как оптимально спроектировать
    #34133637
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
id адреса и есть сам адрес:получите 2 варианта без извращений.хотя понятно дело,что хранение ссылки в таблице человека будет более быстрым решением.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Подскажите как оптимально спроектировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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