![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
dimqw31 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 25.10.2010 Репутация: нет Всего: нет |
Здравствуйте уважаемые форумчане. Вот встал вопросик по поводу архитектуры будущего приложения.
Даже скорее архитектуры данных. Стоит нетривиальная задача написать приложение которое бы при вводе наименований автомобильных запчастей выводила бы марку (список марок) автомобиля в котором используются совместно больше двух любых введенных пользователем запчастей (запчасти вводятся по номеру). Например в автомобиле FORD FOCUS используются запчасти с номерами: 933-3883(запчасть 1), 933-8282(запчасть 2), 933-2932(запчасть 3) 933-2139(запчасть 4) 933-2235(запчасть 5) и т.д. В автомобиле FORD C-MAX используются запчасти с номерами: 933-3283(запчасть 1), 933-2932(запчасть 2), 933-1112(запчасть 3) 933-2235(запчасть 4) и т.д. В автомобиле FORD FUSION используются запчасти с номерами: 933-3283(запчасть 1), 933-2932(запчасть 2), 933-1112(запчасть 3) и т.д. Допустим пользователь выбрал запчасти с номерами 933-3283, 933-2932 и 933-1112. Так как две и больше (в данном случае три) из этих запчастей вместе находятся только в автомобиле марки FORD FUSION, то и программа должна вернуть данную марку на первом месте, а на втором FORD C-MAX (так как там совместно используется две запчасти) или список марок автомобилей(если эти запчасти также используются вместе). У запчасти есть еще такие атрибуты как их количество в марке автомобиля (например 2 противотуманки или 3 плафона (в шт.)) и стоимость запчасти. Еще проблема в том, что запрашивать данные можно разными способами: 1) просто ввести номера запчастей и программа должна выдать марки автомобилей где хотя бы половина выбранных пользователем запчастей использовалась совместно (для начала хотя бы больше двух наименований) 2) ввести номера запчастей и их количество и программа должна вывести где хотя бы половина выбранных пользователем запчастей использовалась совместно причем в заданных или меньших количествах (но не больше); 3) ввести номера запчастей и ввести денежную сумму, и программа должна выдать те марки автомобилей? где хотя бы половина выбранных пользователем запчастей использовалась совместно и сумма их стоимости не превышала бы заданную стоимость. Результаты надо выводить в зависимости в порядке содержания запчастей в автомобиле (в порядке убывания совместно используемых запчастей) Также в программе должна быть возможность забивать данные в базу в виде МАРКА АВТО, НОМЕРА ЗАПЧАСТЕЙ В ЭТОМ АВТО, КОЛИЧЕСТВО ЗАПЧАСТЕЙ В ДАННОМ АВТО, ЦЕНА ЗАПЧАСТИ. Вопрос в том, как организовать хранение данных в БД для удобного их извлечения и занесения, чтобы удобно было реализовать описанную выше логику. Уже весь мозг себе вынес.... Пока придумал только табличку в виде: МАРКА АВТО, НОМЕРА ЗАПЧАСТЕЙ КОТОРЫЕ ЕСТЬ В ЭТОМ АВТО. А далее full-text search по этой табличке (по колонке с номерами запчастей) и вывод марки авто. Правда непонятно куда приделать количество и стоимость запчастей.....??? Буду рад если найдется умный человек и поможет со схемой данных для данной интересной задачки.. Не могу понять какие таблички использовать и в какой конфигурации.. А если кто приведет примеры запросов к этим табличкам так я вообще от счастья в окно выпрыгну. Просто реально уже башку над этим сломал.... |
|||
|
||||
Zloxa |
|
||||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
И что вас смущает в этой структуре? Что заставляет Вас думать, что данная структура Вам не подходит? Вообще классически задача решалась бы так. Таблица автомобилей, таблица зап-частей автомобилей, таблица используемости запчасти в автомобиле.(stfg нормализация) Однако в целом ряде частных случаев, пользуясь бритвой оккамы, можно свести и все к одной, денормализованной таблице, как в Вашем случае.
что мешает прилепить туда же? Сомнительно, что в данном случае необходимо задействовать full-text. Обычного индекса, с лихвой должно бы хватить.
Это сообщение отредактировал(а) Zloxa - 25.10.2010, 12:23 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
||||
|
|||||
dimqw31 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 25.10.2010 Репутация: нет Всего: нет |
Еще один ламерский вопросик...
При внесении данных с формы мне придется вносить сразу в три таблицы? номер запчасти в одну таблицу марку машины в другую и количество запчастей в машине в третью (которая и реализуют отношение многие-ко-многим) |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Можно и из одной формы сразу в три таблицы, но обычно делают три формы. В одной правят автомобили, в другой - запчасти, в третьей - связи.
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
dimqw31 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 25.10.2010 Репутация: нет Всего: нет |
а как можно сделать так чтобы в выражении IN запчасти брались не с условием OR, а с условием AND.. ? |
||||||
|
|||||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Вам это не нужно. Поразмыслите внимательнее. Одна запчасть не может быть одновременно и той и другой, а условие применяется к одной запчасти. Добавлено через 3 минуты и 55 секунд PS В былые времена за оверквотинг очень больно били. Сейчас времена попроще. Но злоупотреблять этим все равно не стоит. Старайтесь цитировать только то, что имеет смысл цитировать. Все цитировать - не надо. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
dimqw31 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 25.10.2010 Репутация: нет Всего: нет |
Извиняюсь, я наверное не правильно сформулировал часть задачки, а потом соответственно и вопросы не правильные начал задавать. Дело в том, что существует не только условие на количество запчастей в машине, но еще у каждой запчасти есть свой числовой атрибут (не важен физический смысл), который разный в каждой марке машины.. Похоже именно этот атрибут (числовой) нужно мне хранить в третьей связующей таблице.. |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Эта фраза создает ощущение, что у Вас существенно прибавилось в понимании основ. Это радует. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
dimqw31 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 25.10.2010 Репутация: нет Всего: нет |
Похоже да, но оказалось не совсем.... Наконец-то сделал нужную модель данных.. Но тут возник новый вопросик У меня в запросе есть условие WHERE (имя столбца) IN ('значение1', 'значение2', 'значение3' и т.д.) Как можно сделать, чтобы запрос искал вхождения НЕ 'значение1' OR 'значение2' OR 'значение3' а 'значение1' AND 'значение2' AND 'значение3'. Вообщем значения у меня хранятся в коллекции, а нужно вывести строки БД, в которых одновременно находились все значения коллекции или хотя бы 3 из 4 (или 2 из 4) Пример: name number значение1 2 значение2 2 значение3 2 значение4 2 значение5 3 значение4 3 значение6 3 значение1 4 значение2 4 значение3 4 запрос.......... WHERE name IN ('значение1', 'значение2', 'значение3', 'значение4') В результате должен вывести: number 2 4 |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Однако ж, мне думается, что если заведомо надо выполнять искать подобного рода поисковые запросы, на сколь нибдуь значимые объемы, то чтото не то с дизайном приложения. Это сообщение отредактировал(а) Zloxa - 26.10.2010, 20:21 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
dimqw31 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 25.10.2010 Репутация: нет Всего: нет |
Да в принципе не очень большие объемы, значений будет в среднем около 10-15, а number около 10000 Добавлено через 11 минут и 3 секунды
А это стандартный код SQL? |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Общие вопросы по базам данных" | |
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |