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

Shtockхочется вам ввести поле в адреса - введите
Shtockможно в человеке сделать ссылку на таблицу с адресами
Если учитывать что таблица адресов намного больше таблицы человеков, то второй вариант выбрать предпочтительнее, но если учесть что будут еще связанные таблицы, навроде таблицы адресов, то получается надо добавлять для каждой таблицы соответствующее поле в таблицу человеков.
Разве никто не сталкивался с ситуациями, когда требуется хранить некую историю, но в тоже время необходим механизм быстрого получения последних данных?
Какой вариант выбрать?
...
Рейтинг: 0 / 0
16.11.2006, 13:53
    #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
16.11.2006, 14:08
    #34133335
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как оптимально спроектировать
собственно сглючил и не туда ответил, но

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

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

Но я хотел бы узнать в общем как правильно организовывается структура таблиц в таких случаях, не вдаваясь в подробную реализацию
...
Рейтинг: 0 / 0
16.11.2006, 14:23
    #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
16.11.2006, 14:58
    #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
16.11.2006, 15:01
    #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
16.11.2006, 15:02
    #34133637
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как оптимально спроектировать
id адреса и есть сам адрес:получите 2 варианта без извращений.хотя понятно дело,что хранение ссылки в таблице человека будет более быстрым решением.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Подскажите как оптимально спроектировать / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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