|
|
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
у меня есть список запчастей, каждая запчасть может соответствовать нескольким маркам автомобилей,например: 1. амортизатор; форд фокус, опель астра 2. сайлент блок; бмв 5, бмв 3 итд теперь например, пользователь ищет все запчасти на форд фокус, вопрос: как правильно организовать базу? пока я вижу только такие варианты: 1) сделать еще 2 или даже 3 таблицы ---------------------- таблица марки авто: код. название марки 1. ауди 2. бмв 3. опель 4. форд ---------------------- таблица модели авто: код. название модели. код марки 1. ауди а6. 1 2. ауди а8. 1 3. форд фокус. 4 4. опель астра. 3 5. бмв 5. 2 6. бмв 3. 2 ---------------------- таблица соответствия запчасти и модели авто: код запчасти. код модели 1. 3 1. 4 2. 5 2. 6 ну то есть у амортизатора код 1 и он соответствует 3. форд фокус. 4 4. опель астра. 3 с кодами 3 и 4 аналогично сайлент блок с кодом 2 соответсвует моделям 5. бмв 5. 2 6. бмв 3. 2 ---------------------- теперь запрос: SELECT * FROM zapchasti INNER JOIN sootvetstvie ON zapchasti.code = sootvetstvie.zapchasti_code WHERE sootvetstvie.zapchasti_code = 3 (3 это код модели авто форд фокус) Правильно? Если правильно то хорошо, но вот проблема в том что база большая и очень нехочется в запрос дополнительную таблицу включать подскажите пожалуйста что тут можно сделать? например такой вариант: 2) таблица запчастей: код запчасти. наименование запчасти. список моделей 1. амортизатор; форд фокус, опель астра 2. сайлент блок; бмв 5, бмв 3 SELECT * FROM zapchasti WHERE model_list LIKE 'форд фокус' тут еще проблема в том что этих моделей может быть огромное количество и всех их в столбцы таблицы загнать не получится, например так: код запчасти. наименование запчасти. соответсвие фокусу, соответсвие опель астре ... итд... Посоветуйте как правильно и как будет быстрее работать? Заранее большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 13:57 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
А вот еще когда вас попросят подгрузить данные из текдока и еще пары-тройки каталогов - что будете делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 14:01 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
Две или даже три таблицы!!! - сильно звучит... Навскидку для ваших запчастей таблиц будет штук 20-30. Минимум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 14:23 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
Интересно, что Вам поручили это. Не в обиду, но каждый должен делать свое дело, или идти учиться. С ходу ничего Вам не посоветуешь. Начните читать про нормализацию реляционных отношений. А лучше привлеките спеца, потом Вам же легче будет развивать и поддерживать проект. Это от всего сердца и мозга совет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 14:27 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
On 05/04/2012 02:57 PM, rusik48 wrote: > Правильно? Пока мысли правильные. > Если правильно то хорошо, но вот проблема в том что база большая и очень Не думаю, что она большая. Она скорее всего маленькая. Сколько конкретно ? > нехочется в запрос дополнительную таблицу включать > подскажите пожалуйста что тут можно сделать? Придётся. По-другому никак. Вообще, на будущее -- кол-во таблиц не имеет значение. Ни в БД, ни в запросе. Пусть их хоть 1000 в БД и 25 в запросе. Наплевать. От этого практически ничего не зависит. Забудь вообще о таких шорах, как "ой, у меня так много таблиц". > таблица запчастей: > код запчасти. наименование запчасти. список моделей > > 1. амортизатор; форд фокус, опель астра > 2. сайлент блок; бмв 5, бмв 3 Это -- нарушение 1-ой нормальной формы, грубейшая ошибка проектирования РБДю > SELECT * FROM zapchasti > WHERE model_list LIKE 'форд фокус' Вот как раз и проблема будет в том, что like '%форд фокус%' работать не будет, это уже нарушение доменной целостности -- ты запихал в одно поле 20 значений, не определяя как эти значения разделяются друг от друга (а на самом деле они никак не разделяются). > тут еще проблема в том что этих моделей может быть огромное количество и всех их > в столбцы таблицы загнать не получится, например так: Моделей мало. Во всём мире не более нескольких тысяч. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 15:09 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
Программист-ЛюбительДве или даже три таблицы!!! - сильно звучит... Навскидку для ваших запчастей таблиц будет штук 20-30. Минимум.Это после первого этапа развития. Потом станет меньше. Но, конечно, все равно больше, чем две-три. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 16:15 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
MasterZivМоделей мало. Во всём мире не более нескольких тысяч.Смотря насколько детализировать (а детализировать в данной задаче надо). В пределе - сотни тысяч, если не миллион. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 16:48 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
> Моделей мало. Во всём мире не более нескольких тысяч. > > Смотря насколько детализировать (а детализировать в данной задаче надо). В > пределе - сотни тысяч, если не миллион. Без постановки задачи это обсуждать бессмысленно. Зачем споришь ? По-любому их не миллиарды и не миллионы. И даже не сотни тысяч. А раз так -- это мало. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 17:28 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
MasterZivЗачем споришь ?А я и не спорю. Это я так, топикстартера попугать :) Если не испугается и сделает что-то, что хотя бы на первоначальном этапе можно будет применять - будет молодец. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 17:35 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
MasterZiv, спасибо!! MasterZivНе думаю, что она большая. Она скорее всего маленькая. Сколько конкретно ? сейчас 400 000 записей, потом будет 4 миллиона, может больше, но не меньше я конечно начинающий, судить не могу со 100% уверенностью, но вроде, как мне кажется, немало ============================================================= MasterZivПридётся. По-другому никак. Вообще, на будущее -- кол-во таблиц не имеет значение. Ни в БД, ни в запросе. Пусть их хоть 1000 в БД и 25 в запросе. Наплевать. От этого практически ничего не зависит. Забудь вообще о таких шорах, как "ой, у меня так много таблиц". значит количество таблиц в запросе слабо влияет на производительность запроса? а я почему-то думал что если у меня всего одна таблица в запросе то будет работать намного быстрее кстати про это особо негде почитать. может подскажете? именно интересует влияние на скорость выполнения каждой следующей добавленной таблицы и/или конструкций WHERE ============================================================= MasterZiv> Правильно? Пока мысли правильные. тут другие люди по разному написали (что-то вроде "иди вешайся" :-))) ) поэтому я все-таки переспрошу: значит я все правильно делаю и именно так и надо делать (как в варианте1 )? и никакого другого варианта кроме 1) в данном случае нет. так? и надо так просто делать и жить дальше? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 17:37 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
rusik48значит я все правильно делаю и именно так и надо делать (как в варианте1 )? и никакого другого варианта кроме 1) в данном случае нет. так? и надо так просто делать и жить дальше? :)Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 17:44 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
rusik48кстати про это особо негде почитать. может подскажете? тут другие люди по разному написали (что-то вроде "иди вешайся" :-))) ) Вешаться отменяется - у тебя есть будущее :) Читай про индексы и кеширование ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 17:44 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
Программист-ЛюбительДве или даже три таблицы!!! - сильно звучит... Навскидку для ваших запчастей таблиц будет штук 20-30. Минимум. ну там по тексту же, речь идет не о всей базе вообще, а о конкретном примере: пользователь хочет найти все запчасти форда фокус. А вообще, конечно и 20 и 30 таблиц нормально для базы в целом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 17:45 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
так мало кода но уже есть опечатка вместо SELECT * FROM zapchasti INNER JOIN sootvetstvie ON zapchasti.code = sootvetstvie.zapchasti_code WHERE sootvetstvie.zapchasti_code = 3 должно быть: SELECT * FROM zapchasti INNER JOIN sootvetstvie ON zapchasti.code = sootvetstvie.zapchasti_code WHERE sootvetstvie.MODEL_code = 3 ============================ alexeyvgrusik48значит я все правильно делаю и именно так и надо делать (как в варианте1 )? и никакого другого варианта кроме 1) в данном случае нет. так? и надо так просто делать и жить дальше? :)Да. Спасибо! ============================ neodddrusik48кстати про это особо негде почитать. может подскажете? тут другие люди по разному написали (что-то вроде "иди вешайся" :-))) ) Вешаться отменяется - у тебя есть будущее :) Читай про индексы и кеширование Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 17:57 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
> Вешаться отменяется - у тебя есть будущее :) > Читай про индексы и кеширование Ну, совсем "вешаться" не отменяется, и в первую очередь потому, что автору нужно всё-таки прочитать про нормальные формы реляционных таблиц и про основы проектирования РБД. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 23:29 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
> сейчас 400 000 записей, потом будет 4 миллиона, может больше, но не меньше 400 тыщ в какой таблице? Каких сущностей это кол-во ? > я конечно начинающий, судить не могу со 100% уверенностью, но вроде, как мне > кажется, немало Это не микроскопические объёмы, но по современным меркам не много. БД начального уровня. > значит количество таблиц в запросе слабо влияет на производительность запроса? Вообще никак не влияет. Считай пока что так. (Оно безусловно влияет, но не так как ты думаешь, поэтому ты не думай, что влияет, а думай, что не влияет. Потому что оно на самом деле не влияет.) > а я почему-то думал что если у меня всего одна таблица в запросе то будет > работать намного быстрее У меня таблица 1 миллиард записей. я делаю запрос: select * from mytable order by somefield Простой вроде бы запрос. и таблица одна. Ну и как ты думаешь, завершится когда-нибудь такой запрос ? > кстати про это особо негде почитать. может подскажете? > именно интересует влияние на скорость выполнения каждой следующей добавленной > таблицы и/или конструкций WHERE Конкретно про это ты нигде не прочитаешь. Потому что такую бредятину никому в голову не придёт писать. А вообще о производительности запросов ... не знаю, не могу представить какую-то хорошую популярную литератуту. > поэтому я все-таки переспрошу: > значит я все правильно делаю и именно так и надо делать (как в варианте1 )? > и никакого другого варианта кроме 1) в данном случае нет. так? > и надо так просто делать и жить дальше? :) Да, да, да. И читать про нормальные формы и проектирование РБД. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2012, 23:48 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
MasterZivКонкретно про это ты нигде не прочитаешь. Потому что такую бредятину никому в голову не придёт писать. А вообще о производительности запросов ... не знаю, не могу представить какую-то хорошую популярную литератуту. Производительность не бывает "вообще". Для каждой конкретной СУБД вопросы производительности рассматриваются отдельно в соответствующих разделах. Потому что каждая из них работает по своему. Твой пример, на Firebird например, может выдать результат мгновенно в некоторых случаях. Да и Оракул не брезгует index order-ом, насколько я знаю. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 00:16 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
Ты оптимизируешь справочник, то есть по сути таблицу-только-для-чтения. Скорость записи в эту таблицу тебя трогает мало (нужно только для синхронизации с внешними источниками). Такого рода задачи легко решаются путем индексов и матвьюх. Скажем если бы пришлось искать баланс между чтением и записью было бы гораздо хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 00:23 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
On 05/05/2012 01:16 AM, Dimitry Sibiryakov wrote: > Производительность не бывает "вообще". Для каждой конкретной СУБД вопросы > производительности рассматриваются отдельно в соответствующих разделах. Безусловно. Прав на все 100%. Потому > что каждая > из них работает по своему. Но тем не менее порядка 60 процентов функциональности у всех одинакова. Твой пример, на Firebird например, может выдать > результат > мгновенно в некоторых случаях. Да и Оракул не брезгует index order-ом, насколько > я знаю. ЭТОТ? select * from mytable order by somefield МГНОВЕННО ? Миллиард записей ? Он будет или не будет сортировать, это может быть, но вот выдать мгновенно миллиард записей -- этого не бывает. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 00:31 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
MasterZivОн будет или не будет сортировать, это может быть, но вот выдать мгновенно миллиард записей -- этого не бывает. Не бывает. Если птица решит не сортировать, то мгновенно выдаст первые Х записей, а дальше подождёт: может, юзверь одумается и не станет просить следующие Х. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 01:05 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
On 05/05/2012 02:05 AM, Dimitry Sibiryakov wrote: > Не бывает. Если птица решит не сортировать, то мгновенно выдаст первые Х > записей, а дальше > подождёт: может, юзверь одумается и не станет просить следующие Х. "Твой пример, на Firebird например, может выдать результат мгновенно в некоторых случаях." Расскажи тогда, что же по-твоему понимается под фразой "выдать результат". Нет, даже не надо, я сам скажу за тебя, не утруждайся -- по-твоему выдать результат -- это выдать первые 10 строк, ведь это же уже результат. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 12:46 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
MasterZivпо-твоему выдать результат -- это выдать первые 10 строк, ведь это же уже результат. А по-твоему - нет? Т.е. первая страница, выданная гуглем это вовсе и не результат, поскольку остальные 100500 ты ещё не просмотрел?.. Ню-ню... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 14:16 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
On 05/05/2012 03:16 PM, Dimitry Sibiryakov wrote: > А по-твоему - нет? Т.е. первая страница, выданная гуглем это вовсе и не результат, > поскольку остальные 100500 ты ещё не просмотрел?.. Ню-ню... Вообще-то гугль выдаёт сразу все страницы. во-вторых, там другие немного технологии -- нет транзакций, есть промежуточное хранилище помимо БД, но вообще я уже понял -- у тебя во всём особый подход. Я не буду с тобой спорить. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2012, 15:09 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
MasterZiv> сейчас 400 000 записей, потом будет 4 миллиона, может больше, но не меньше 400 тыщ в какой таблице? Каких сущностей это кол-во ? запчастей. например: сайлент блок на форд фокус, цена 100 рублей итд MasterZivУ меня таблица 1 миллиард записей. я делаю запрос: select * from mytable order by somefield Простой вроде бы запрос. и таблица одна. Ну и как ты думаешь, завершится когда-нибудь такой запрос ? ну все когда нибудь кончается... но я не знаю и какой правильный ответ? MasterZiv On 05/05/2012 03:16 PM, Dimitry Sibiryakov wrote: > А по-твоему - нет? Т.е. первая страница, выданная гуглем это вовсе и не результат, > поскольку остальные 100500 ты ещё не просмотрел?.. Ню-ню... Вообще-то гугль выдаёт сразу все страницы. во-вторых, там другие немного технологии -- нет транзакций, есть промежуточное хранилище помимо БД, но вообще я уже понял -- у тебя во всём особый подход. Я не буду с тобой спорить. а как можно ли SELECT научить выдавать ответ порциями? например как выдать первые 10 000 записей я знаю - TOP 10000 а как выдать последующие 10 000 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2012, 21:27 |
|
||
|
как создать правильный запрос и правильную структуру базы данных?
|
|||
|---|---|---|---|
|
#18+
rusik48а как можно ли SELECT научить выдавать ответ порциями? Это легко: надо всего лишь ответ принимать порциями. Пока ты не вызовешь fetch, данные не придут. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2012, 21:45 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37782955&tid=1541689]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
134ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 425ms |

| 0 / 0 |
