| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Оптимальная структура |
| Автор: taral 23.12.2008, 17:57 |
| Есть товар с характеристиками характеристика_1 характеристика_2 характеристика_3 характеристика_3 это большой текст на страниц 200 он может быть, может не быть. Выводится он тоже не всегда. По специальному запросу. Но у одного товара только одно описание. Добавлено через 10 минут и 7 секунд Я нашел 2 варианта хранения данных. Все вбить в одну таблицу. Разбить на 2 таблици. Первая это товар с характеристиками характеристика_1 характеристика_2 вторая это id товара и характеристика_3 Но при выводе информации про товара я должен знать присутствует ли у него характеристика_3 (для того что бы знать давать на нее ссылку или нет) потому в таблицу товара добавляю еще одно поле типа enum('yes', 'no'). Вопрос вот в чем. Как лучше сделать В одной таблице или в двух? |
| Автор: bars80080 23.12.2008, 18:38 |
| имхо, текст (коли это описалово) лучше в файле, а в поле линк на него и инклудить при наличии оного |
| Автор: lelik133 23.12.2008, 21:24 |
| в плане нормализации БД лучше избегать полей в которых может часто отсутствовать значение. Поэтому такая схема вполне приемлема. Можно вытаскивать все одни запросом через left join, тогда поле enum лишнее. далее как писал bars80080. |
| Автор: taral 23.12.2008, 22:31 | ||
Ну я специально написал что нужно знать есть ли описание у товара. Просто допустим я вывожу 15 товаров с базы. И мне нужно знать есть ли описание у товара (для того чтобы знать выводить на него ссылку или нет) Если не будет поля енум то для того что бы узнать мне придется делать запрос на таблицу с описаниями. Вопрос я задал вот почему. Меня интересовало если я делаю выборку по базе только определенных столбцов замедлится ли работа базы если будут присутствовать поля с большими текстами. И замедлят ли они поиск по базе. В принципе решение с записью в файлы текстов неплохое. Обдумаю его. спасибо за идею. |
| Автор: lelik133 23.12.2008, 22:46 |
| зачем делать еще запрос если ты объединением (join) уже подключаешь вторую таблицу?? У тебя уже характеристика_3 присутствует в результирующем наборе, тебе только остается проверить пусто поле или нет и если нет вывести. Если писать содержимое характеристика_3 в файл, а в базе хранить только ссылку на него, то это даст выигрыш в производительности. |
| Автор: taral 23.12.2008, 23:24 | ||
Вы меня не правильно поняли, или я не ясно выразил свою мысль. Моя идея вот в чем. Вывожу 15 товаров. (таблицу с описанием я вообще не трогаю) Использую только таблицу_1. Если значение енум - yes я помимо характеристик товара вывожу ссылку на описание. Она формируется на основе id товара. Если пользователь переходит по ссылке то тут задействуеться таблица_2 (а первую вообще не трогаем). И вывожу описание товара. Сразу скажу что пример чисто схематический. Поскольку вряд ли кому то нужно видеть чисто описание товара без его характеристик. Просто в своей работе я использую аякс. И хочу сделать погрузку описания по требованию пользователя. В другом случае ее вообще не трогать. Что бы избежать лишней нагрузки на базу. Потому и вопрос задал. Я хотел узнать если в базе будет "большое боле" и оно не всегда будет использоваться то есть смысл вынести его отдельно в таблицу (под смыслом я имел в виду нагрузка уменьшится или нет.) Надеюсь теперь ясно зачем нужен енум. А join я вообще откинул. Если использовать его не проще тогда в одной таблице все и хранить. А вообще я все больше склоняюсь к вынесению текста в txt файлы. Так отпадет нужда в енуме и второй таблице. |
| Автор: Gold Dragon 26.12.2008, 00:41 |
| если я понял правильно, то не вижу особого смысла иметь 2 таблицы. Если есть поле "Характеристика_3" которое может быть иногда пустым, то почему оно должно занимать лишнее место? Есть данные - добавь, нет - ну значит нет. Единственное, это наверное нужно применять оптимизацию таблицы при редактировании или удалении информации из этого поля.. НУ я так понимаю тип этого поля TEXT Что касается использования файлов... А зачем? таблицы надёжнее, да и работать с ними приятнее |
| Автор: lelik133 26.12.2008, 09:03 |
| Gold Dragon, и фотографии весом в несколько мегов и файлы прикрепленные для скачивания тоже будешь в mysql засовывать? есть удобство с одной стороны, а есть не менне маловажная вещь производительность с другой... |
| Автор: Gold Dragon 26.12.2008, 22:18 |
| ну вообще-то, разговор шёл только про текст, так что не нужно перегибать палку а вот что касается производительности, то я как-то не уверен что с файлами это будет производительнее... |
| Автор: bars80080 27.12.2008, 01:32 |
| как они могут быть не производительней, если БД - те же файлы и есть, только обременённые дополнительными операциями протягивать каждый раз дикие объёмы текста через mysql-сервер... |
| Автор: Gold Dragon 27.12.2008, 08:43 |
| ну к примеру, практически все движки (CMS) хранят весь контент в базе. Не думаю что разработчики этого не знали А вот плюсов больше, например, обширная система запросов, т.е. что хочешь то и творишь, или что очень важное, система резервирования и т.п. Хотя я абсолютно не возражаю чтобы в поле таблицы хранить только ссылку на текстовый файл |
| Автор: bars80080 27.12.2008, 12:22 |
знавал я пару разработчиков... на самом деле, они используют БД от лени. фишка в чём, если есть файл - то его надо подключать, в таком случае, без дополнительной системы проверок этот файл (если его может редактировать юзер) становится потенциальной угрозой, ведь туда можно зафигарить любой код. чтобы не париться, они поступают в итоге с многокилобайтными данными также как с простым поле "фамилия" к примеру, естесственно обосновывая это какими-нибудь причинами удобства и всё-такое, хотя достаточно было, при желании, построить доп.обработчики и интерфей для его настройки те же самые разработчики славятся тем, что открытые CMS почти всегда очень тяжёлые и медленно работающие, в то время как коммерческие специально затачиваются под клиента, и там они борются за каждую секунду (если хорошая контора) если нужно, то да. вот только на моей памяти не возникало случая, чтобы требовалась многократная сортировка для больших текстов. почти всегда они идут именно в качестве "текста" и не более |
| Автор: ksnk 27.12.2008, 13:14 |
| Imho, надо просто определить, что-же такое файл Файл, с точки зрения CMS-ки - это длинная, неделимая последовательность байт, в которой не надо искать, которую не надо редактировать. Если доопределить понятия "длинная", "не надо искать" и "не надо редактировать", легко получается однозначный критерий, чего и где хранить Ну да... а человек, с точки зрения Аристотеля - "двуногое, без перьев"... |
| Автор: ТРЕТЬ 5.1.2009, 19:44 |
| хм... Ну честно говоря, "описание на страниц 200", вообще лучше в окошко браузера не выводить а хранить спокойно в вордовском доке (например) и предлагать пользователю скачать, если он того хочет. Храните в базе описание скажем на страницу-две, заинтересуйте пользователя этим. А с файлами связываться... Ну не знаю, если у вас вместо интерфейса редактирование устраивает редактирование через FTP и акелпад, то почему бы и нет... Насчет оптимизации базы... Ну, друзья, мы уже слава богу в 2009 году живем, сегодня уже производственные мощности позволяют MATCH AGAINST на таблицы размером в гигабайт выполнять менее чем за секунду... хотя нет, наверное приврал малость, но тем не менее. По-моему, вопрос того что скрипт будет выполняться не 0.1 сек а 0.11 сек, не стоит ставить во внимание, если учесть, что оптимизация займет хотя бы час. Ну и напоследок не дай вам бог делать поиск по файлам)) |
| Автор: Gold Dragon 7.1.2009, 11:57 |
| +++ |
| Автор: DoubleTaurus 28.1.2009, 21:14 |
| Помниться на заре своего программирования я именно так и делал, весь сайт был написан на файликах, причем каждый из них обновлялся минимум раз в сутки, +поиск, +редактирование.... короче это смерть... а сайт тот до сих пор жив и радует всех своим контентом, правда я его месяц переписывал, ставил на БД (все кроме контента), но все равно БД кривая, т.к. это я делал на заре познаний в mysql |
| Автор: Gold Dragon 29.1.2009, 10:43 |
| DoubleTaurus, так мой сосед до сих пор на запорожце ездит, а другой в Лексиконе печатает |