powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как лучше спроектировать базу?
11 сообщений из 11, страница 1 из 1
Как лучше спроектировать базу?
    #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
Как лучше спроектировать базу?
    #32754016
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нда, мы не ищем легких путей... Вслух высказывать свое отношение к такой огранизации не буду по вполне понятным причинам:)
Непонятно, какой запрос нужно переписать.
Интерфейсная часть организуется просто - в основной форме - подчиненная (табличная или ленточная) с источником t_geo_plasts .
...
Рейтинг: 0 / 0
Как лучше спроектировать базу?
    #32754020
Фотография Shark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>отношение к полям множесвам
Никогда так не делал. ИМХО это чушь полная
>Много ли переделывать
А нах переделывать, если все и так работает? Зачем чинить несломаное?
...
Рейтинг: 0 / 0
Как лучше спроектировать базу?
    #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
Как лучше спроектировать базу?
    #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
Как лучше спроектировать базу?
    #32754186
Рачаев Олег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замечание: ALL IN

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

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

Теперь думаю переделать ... + 1 подчиненка, - красота, + усложнение запросов.
...
Рейтинг: 0 / 0
Как лучше спроектировать базу?
    #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
Как лучше спроектировать базу?
    #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
Как лучше спроектировать базу?
    #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
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как лучше спроектировать базу?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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