Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как лучше спроектировать базу? / 11 сообщений из 11, страница 1 из 1
26.10.2004, 08:40:34
    #32754008
Рачаев Олег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше спроектировать базу?
Всем привет.

Собственно вопрос в следующем.

Есть таблица t_skv_geo(geo_id, geo_date, skv_id,geo_plasts,...) .
В поле geo_plasts храниться множество кодов из справочника t_plast(plast_id,plast_name) . Т.е. поле-множество, значения в котором разделены ; . Например: 1;2;32;655

Я нахожу уникальную запись в t_skv_geo, след.образом
SELECT geo_id FROM t_skv_geo WHERE geo_date=... AND skv_id=... AND geo_plast=... . (*)

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

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

Возникла идея создать третью таблицу t_geo_plasts(geo_id,plast_id) для развязки отношения M:M между t_skv_geo и t_plast.

Вопрос в том как мне переписать запрос (*) с учетом такой развязки? И много ли мне придеться переделывать в интерфейсной части? Вообще интересно узнать отношение проектировщиков к полям-множествам...

Всем спасибо за внимание.
...
Рейтинг: 0 / 0
26.10.2004, 08:50:11
    #32754016
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше спроектировать базу?
Нда, мы не ищем легких путей... Вслух высказывать свое отношение к такой огранизации не буду по вполне понятным причинам:)
Непонятно, какой запрос нужно переписать.
Интерфейсная часть организуется просто - в основной форме - подчиненная (табличная или ленточная) с источником t_geo_plasts .
...
Рейтинг: 0 / 0
26.10.2004, 08:55:37
    #32754020
Shark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше спроектировать базу?
>отношение к полям множесвам
Никогда так не делал. ИМХО это чушь полная
>Много ли переделывать
А нах переделывать, если все и так работает? Зачем чинить несломаное?
...
Рейтинг: 0 / 0
26.10.2004, 09:42:20
    #32754073
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше спроектировать базу?
Будет так:

SELECT geo_id FROM t_skv_geo as G INNER JOIN t_geo_plasts as P
ON G.geo_id=P.geo_id
WHERE geo_date=... AND skv_id=... AND P.plast_id=....

Несмотря на некоторое кажущееся усложнение работать это будет быстрее...
...
Рейтинг: 0 / 0
26.10.2004, 10:27:19
    #32754169
Рачаев Олег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше спроектировать базу?
2 Aleks2:

Не подходит, т.к. критерий для geo_plasts = мн-во кодов, тут без вложенного подзапроса не обойтись.

Мой вариант:
SELECT geo_id FROM t_skv_geo AS T1 WHERE (geo_date=... AND skv_id=... AND (SELECT plast_id FROM t_ge_plasts AS T2 WHERE T2.geo_id=T1.geo_id) IN (..., ..., ...) )

Отрабатывать будет по-любому медленее
...
Рейтинг: 0 / 0
26.10.2004, 10:32:56
    #32754186
Рачаев Олег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше спроектировать базу?
Замечание: ALL IN

Плюс при создании/удалении записей придеться гемороиться с этой развязочной таблицей t_geo_plasts ...
...
Рейтинг: 0 / 0
26.10.2004, 10:36:27
    #32754194
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше спроектировать базу?
это стандартное решение для М:М
А как вводятся записи? К примеру, у меня через форму и я даже не задумываюсь над этой проблемой, все идет автоматом.
...
Рейтинг: 0 / 0
26.10.2004, 10:46:12
    #32754219
Рачаев Олег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше спроектировать базу?
2 Alexander G:

Ну сейчас это множественное поле(1 листбокс) заполняеться через форму по-шамански, как я в заглавии написал.

Теперь думаю переделать ... + 1 подчиненка, - красота, + усложнение запросов.
...
Рейтинг: 0 / 0
26.10.2004, 11:27:13
    #32754347
Рачаев Олег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше спроектировать базу?
Вообщем, оказываться запарос вида

SELECT geo_id FROM t_skv_geo AS T1 WHERE (geo_date=... AND skv_id=... AND (SELECT plast_id FROM t_ge_plasts AS T2 WHERE T2.geo_id=T1.geo_id) IN (..., ..., ...) )


НЕ РАБОТАЕТ!! Пишет : "Подзапрос должен возвращать одно значение"

Так как же правильно переписать запрос (*) с учетом?! HELP!
...
Рейтинг: 0 / 0
26.10.2004, 14:49:02
    #32755051
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше спроектировать базу?
SELECT geo_id
FROM t_skv_geo INNER JOIN t_geo_plasts ON t_skv_geo.geo_id = t_geo_plasts .geo_id
WHERE t_geo_plasts.plast_id=1 Or t_geo_plasts.plast_id=1926
GROUP BY t_skv_geo.geo_id
HAVING Count( t_skv_geo.geo_id)>1

?
...
Рейтинг: 0 / 0
26.10.2004, 15:44:43
    #32755219
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше спроектировать базу?
Ты скажи, ты скажи: что те надо, что те надо...

И получишь, что ты хошь...
-----------
Какие-такие вложенные запросы?

Откель же мне знать что ты должон получить в результате...

>>Я нахожу уникальную запись в t_skv_geo, след.образом
SELECT geo_id FROM t_skv_geo WHERE geo_date=... AND skv_id=... AND geo_plast=.... (*)

>>Есть таблица t_skv_geo(geo_id, geo_date, skv_id,geo_plast s ,...).

Ну и я выдал для поиска по 1 пласту. Ежели тебе надо по набору пластов, то
набор -> во временную таблицу: t_sel_plasts(plast_id int)

SELECT geo_id FROM t_skv_geo as G INNER JOIN t_geo_plasts as P
ON G.geo_id=P.geo_id
INNER JOIN t_sel_plasts as S ON P.plast_id=S.plast_id
WHERE geo_date=... AND skv_id=...
GROUP BY geo_id
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как лучше спроектировать базу? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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