|
|
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
Всем привет. Есть у меня небольшая програмка для личного пользования, вот решил переписать (а то количество быдлокода уже зашкаливает). Заодно и базу переделать, на данный момент в основной таблице нагромоздилось что-то типа такого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Т.е. не в каждой строке заполнены все поля. Сейчас вместо неприменимых параметров (N/A) стоят Null'ы, но большое количество Null'ов в базе насколько знаю не есть хорошо. Пока есть две идеи: - разбить таблицу на несколько равнозначных таблиц разной ширины, - выделить основную таблицу, в которой заполнены все поля, а параметры, что встречаются не везде - вынести в отдельные таблицы и использовать связь "многие-ко-многим". В данном случае, например, понадобиться три дополнительных таблицы для param3, param4 и param5 соответственно. Помогите сделать правильный выбор, чтобы в последствии не пожалеть. А может есть другие варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 16:36 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
shckvalСейчас вместо неприменимых параметров (N/A) стоят Null'ы, но большое количество Null'ов в базе насколько знаю не есть хорошо. Плюнь в глаз тому идиоту, что сказал подобную глупость. shckvalвыделить основную таблицу, в которой заполнены все поля, а параметры, что встречаются не везде - вынести в отдельные таблицы и использовать связь "многие-ко-многим". В данном случае, например, понадобиться три дополнительных таблицы для param3, param4 и param5 соответственно. Не надо ни выделять, ни разводить толпу дополнительных таблиц. Одна таблица: id, value. Всё. Связь 1:N. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 16:43 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovНе надо ни выделять, ни разводить толпу дополнительных таблиц. Одна таблица: id, value. Всё. Связь 1:N. Не совсем понял... одна таблица всего с двумя колонками? Связь 1:N - это что с чем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 19:41 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
IMHO, народная мудрость из старых анекдотов про программистов: - Папа, а почему солнце каждый день на востоке восходит, а на западе заходит? - Сынок, а ты проверял? - Проверял - Хорошо проверял? - Хорошо - И что, правда работает? - Работает - Ну раз работает, тогда ничего не трогай !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 19:57 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
shckvalодна таблица всего с двумя колонками? Ага. shckvalСвязь 1:N - это что с чем? Таблицы значений параметров с таблицей объектов, к которым эти параметры относятся. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 19:57 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
shckvalПомогите сделать правильный выбор, чтобы в последствии не пожалеть. А может есть другие варианты? В неправильном направлении думаете. (очень дурной тон так делать) Как Вам уже сказали 2 таблицы: 1) параметры 2) значение параметра ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 19:58 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
SergueiКак Вам уже сказали 2 таблицы: 1) параметры 2) значение параметра Это я кажется понял как сделать. Параметры: Код: plsql 1. 2. 3. 4. 5. 6. Значения парамеров: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Но это не совсе сходиться с Dimitry SibiryakovshckvalСвязь 1:N - это что с чем? Таблицы значений параметров с таблицей объектов, к которым эти параметры относятся.Ведь нужна ещё третья таблица, таблица собственно объектов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 22:09 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
shckvalВедь нужна ещё третья таблица, таблица собственно объектов? А у тебя её нет? id твоей "главной таблицы" никуда не ссылается?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 22:36 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
shckvalВедь нужна ещё третья таблица, таблица собственно объектов? Разумеется. Из нее и нужно притянуть в значения параметров id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 22:39 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
shckval... большое количество Null'ов в базе насколько знаю не есть хорошо. С точки зрения визуального восприятия - да, с точки зрения скорости работы СУБД - никакой разницы. shckval Помогите сделать правильный выбор, чтобы в последствии не пожалеть. А может есть другие варианты? На данный момент совет один - не трогать. Т.к. для того чтобы дать совет необходимо как минимум понимать что есть и к чему идем. Ни того ни другого нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 22:41 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
Злой БобрНа данный момент совет один - не трогать. "Гениальный" совет. Проблема тут не с нулами. А с тем как организована база. Что делать при появлении новых параметров? До бесконечности создавать поля? Не знаю как в каких базах, но в оракле помоему может быть помоему 240 полей. ТС делайте как написано выше и все будет по феншую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 22:59 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
Serguei Проблема тут не с нулами.Проблема в том что ТС сам не знает что хочет. У него нет четких требований, он хочет "по феншую". У EAV, который большинство советует, есть два неисправимых недостатка Serguei Что делать при появлении новых параметров?А кто вам сказал что появятся новые параметры, ТС этого не заявлял Serguei До бесконечности создавать поля?Вы так говорите как будто это что-то плохое. Serguei но в оракле помоему может быть помоему 240 полей.Ответ не верный и кто вам сказал что у ТС Оракл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 23:20 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
SERG1257У EAV, который большинство советует, есть два неисправимых недостатка Один: несовместимость с идиотами. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 23:33 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
SergueiЧто делать при появлении новых параметров? До бесконечности создавать поля? А с чего Вы вдруг решили, что существует потребность в добавлении новых полей? Из переписки выше видно, что у ТС есть какая-никакая, но работающая программа, с которой он хочет что-то сделать, но пока не понятно для чего и почему у него возникла такая потребность. А раз такая туманная неопределенность, зачем ломать что-то, что уже и так работает? Как уже выше отмечалось: - Ну раз работает, тогда ничего не трогай !!! Кстати, подобная мудрость есть и у механиков, краткий смысл которой звучит так: народная мудростьНе нужно ремонтировать работающий двигатель! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2015, 23:36 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
> А может есть другие варианты? Куча. Вы главного не сказали: зачем это вам? Что это за параметры, как они меняются, как вы их используете, какая у них размерность, есть ли между ними зависимости? В общем, задачу опишите. Imho в данном случае "не трогать" - хорошая рекомендация: корректное решение может оказаться достаточно сложным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2015, 01:39 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
guest_20040621> А может есть другие варианты? Куча. Вы главного не сказали: зачем это вам? Что это за параметры, как они меняются, как вы их используете, какая у них размерность, есть ли между ними зависимости? В общем, задачу опишите. Imho в данном случае "не трогать" - хорошая рекомендация: корректное решение может оказаться достаточно сложным.Зачем мне моя программа? Даже не знаю как сказать, что б жилось легче)) Параметры эти - это результаты парсинга веб-страниц. Зависимости/как меняются: при обновлении какого-параметра с обрабатываемой страницы может меняться другой параметр в пределах одного и того же объекта, в зависимости от стратегии обработки. Параметры могут быть разного типа, например: дата внесения в базу (DATETIME), дата публикации на сайте (DATETIME), окончание срока действия (DATETIME), текст (TEXT), цена (DECIMAL), статус (ENUM), хеш-идентификатор (VARCHAR), ссылка или внешний id (VARCHAR) и т. д. Как использую - выборка/сортировка/поиск. Совсем не трогать не получится, по крайней мере поля-таки иногда приходится добавлять при добавлении нового ресурса. Хотя вряд ли их когда-либо будет 240, думаю и 20 не наберется. П.С.М.у ТС есть какая-никакая, но работающая программа, с которой он хочет что-то сделать, но пока не понятно для чего и почему у него возникла такая потребность. А раз такая туманная неопределенность, зачем ломать что-то, что уже и так работает?Мне определенно ясно, что код в таком виде каким он есть есть сейчас все трудее читать и дополнять, на него даже смотреть все противнее)). Для рефакторинга и оптимизации есть время и вдохновение, но сначала нужно определиться с базой. SERG1257Проблема в том что ТС сам не знает что хочет. У него нет четких требований, он хочет "по феншую".Да я действительно не могу предоставить Вам ТЗ, извините. Я не программист и даже не студент, а так себе, энтузиаст. Идеи просто время от времени сами приходят в голову в процессе использования программы или серфинга по интернетам. Dimitry SibiryakovshckvalВедь нужна ещё третья таблица, таблица собственно объектов? А у тебя её нет? id твоей "главной таблицы" никуда не ссылается?.. Ссылается на таблицу категорий, но это не то. Вообщем такое у меня получилось: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2015, 05:31 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
ТСу EAV вполне подойдет. Главное - правильно его реализовать. Кроме всего, полученный опыт поможет применять его в других проектах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2015, 09:43 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
> Зачем мне моя программа? Неловко сформулировал. Вопрос был о применении базы данных. Из вашего описания я понял, что достаточно близкий аналог - лог. Но этого недостаточно: что вы парсите, что делаете с изменениями? Видите ли, как только у вас появляется цена чего-либо, появляется и геморрой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2015, 11:27 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
shckval, Нормальный вариант EAV вырисовывается (Вы поиск "EAV" по форуму делали?) . Я бы добавил в таблицу `params` поле "datatype", определяющее тип значения (число, дата, текст и т.д.). Можно также добавить в таблицу `values` поля valueN - числовое valueD - дата valueT - текст и т.д. раз хочется сортировать. Правда, тогда тоже будут null-ы, но Вам уже писали, что это нестрашно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2015, 12:08 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
shckvalТолько ведь параметры, как я писал - они разных типов, если все их перевести в текст при занесении в базу - это ж потом как сортировку делать? Вы писали? Может просто подумали про это? В вопросе такого не было. Короче, разберитесь сначала что именно вам надо, потом уже начинайте форум бомбить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2015, 12:56 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
guest_20040621Из вашего описания я понял, что достаточно близкий аналог - лог. Но этого недостаточно: что вы парсите, что делаете с изменениями? Видите ли, как только у вас появляется цена чего-либо, появляется и геморрой. Парсятся элементы страниц - строки таблиц, div'ы и т.п., в зависимости от типа верстки. Результаты предварительно фильтруются по разным критериям, сравниваются с имеющимися в таблице (запрос SELECT), новые добавлятся в таблицу (запрос INSERT) и выводятся на экран. При этом некоторое из уже занесенных в базу результатов тоже могут получить статус новых (запрос UPDATE) и тоже выводятся. После просмотра все помечается как просмотренное (ещё UPDATE) и храниться в базе пока через несколько месяцев не подчистится (запрос DELETE). Если долгое время программой не пользоваться, то потом, чтобы не смотреть все накопившееся сразу, результаты сортируются (SELECT .... ORDER BY ....) и просматриваются частями. Иногда ведется поиск по базе (ещё SELECT). Вроде все, больше операций с базой нет. SERG1257У EAV, который большинство советует, есть два неисправимых недостаткаВы имеете ввиду эти недостатки? DirksDRВы поиск "EAV" по форуму делали?Да, я погуглил-почитал немного, спасибо всем за наводку как это называется. Пришел к выводу, что такая модель была бы очень уместна, если программу распространять, чтобы пользователям не приходилось лезть в базу данных при добавлении нового параметра. Но я вроде не планирую. И тут получается дилемма: либо потратить усилия на реализацию и потом постоянно терять в производительности, либо действительно оставить как есть, с кучей нуллов, раз уж оказывается они не так страшны. Если понадобится когда-то добавить параметр, то для меня это несложно. А в код программы при этом все равно лезть, так как единственая причина добавлять ещё новые параметры - это необходимость использовать их при обработке результатов парсинга. SergueiВы писали? Может просто подумали про это? В вопросе такого не было.Писал в том же сообщении. Извините, наверное действительно нужно было сразу описать подробнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 21:27 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
shckval Вы имеете ввиду эти недостатки?Я имею ввиду 1 Производительность запросов а) строка которая сразу доставалась бы со страницы целиком теперь размазана по всей таблице - чем больше полей тем больше размазана б) индексация - индекса по нескольким полям средствами СУБД сделать нельзя, а в индекс по одному полю лезут левые записи из других полей 2 Отсутсвие ограничений со стороны СУБД и либо перекладывание этого труда на прикладного программиста либо просто забивание на них. Пример - ошибся в имени таблицы или поля - СУБД ошибку не вернет, а скажет - Данных не найдено. Всю безопасность тоже придется реализовывать прикладному программисту. Причем чем дальше развивается проект, тем недостатки серьезнее (данных больше, вероятность ошибок и багов выше, квалификация поддерживающего персонала ниже и т.д.), а достоинства блекнут (в большой системе никто "на лету" словарь не правит). То есть получается ситуация когда плюшки достаются одним (разработчикам программы), а расхлебывать приходится другим (поддержке) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 21:50 |
|
||
|
Помогите переделать базу данных
|
|||
|---|---|---|---|
|
#18+
> Парсятся элементы страниц Спасибо, что не начали рассказывать о DOM. Всё просто: сегодня вы получили некоторую цену некоторой товарной позиции некоторого поставщика. Завтра вы захотите иметь цены на эту же товарную позицию ещё от сотни поставщиков. Причём, с некоторой историей её изменений. Формулировка вполне в рамках вашей задачи, но это существенно другая сложность. Если вы можете описать ваш результат небольшим количеством элементов и атрибутов и не ожидаете их сильного роста, я бы не советовал что-то менять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2015, 23:03 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38935357&tid=1540576]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
172ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 509ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...