Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Много полей в БД 
:(
    Опции темы
JEEN
  Дата 1.2.2012, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



На данный момент у меня 14 полей в базе дынных и около 10 000 записей. Ежемесячно прибавляется по 100-200 записей.
Скоро еще нужно будет добавлять 4 поля. В связи с этим интересует вопрос, как база данных себя будет чувствовать? Есть ли какое-нибудь ограничение?

Сейчас подумваю над объединением некоторых полей. Например, есть 3 поля типа TEXT. Их можно объединить в 1, но тогда придется регулярками их обрабатывать, наверно, хуже будет?
PM MAIL   Вверх
newbee
Дата 1.2.2012, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: нет
Всего: 19



Из того, что тема создана в разделе PHP, следует сделать вывод, что БД - MySQL?

Цитата(JEEN @  1.2.2012,  23:50 Найти цитируемый пост)
В связи с этим интересует вопрос, как база данных себя будет чувствовать? Есть ли какое-нибудь ограничение?
Хорошо будет чувствовать, ограничение, если и есть, то на размер целой записи, т.е. объединив несколько полей в одно ты разве что прибавишь себе геморроя.

10000 записей - это такая мелочь, что задумываться об оптимизации не надо, кроме простых вещей вроде индексов.


--------------------
You're face to face
With man who sold the world
PM   Вверх
JEEN
Дата 1.2.2012, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



newbee, что-то я забыл указать, да, БД - MySQL. Спасибо за ответ) Спасли мне несколько часов работы.
PM MAIL   Вверх
ksnk
Дата 1.2.2012, 23:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



JEEN, Во всей базе - 14 полей? Возможно будет разумно почитать что-нибудь про реляционные базы данных и разбить на несколько таблиц... smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
JEEN
Дата 2.2.2012, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



ksnk, точне не в базе, а в таблице. Попробую привести пример (на самом деле таблица другая)

Таблица "Автомобили"
ID | Название | Количество колес | Номер двигателя | Номер рамы | Цвет кузова | Количество дверей | Описание | ...

что тут можно разбить на несколько таблиц? Из необязательных только "Описание".
PM MAIL   Вверх
MoLeX
Дата 2.2.2012, 06:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 7
Всего: 140



Вам точно следует почитать про нормальные формы БД.
Полностью таблицу опишите, с типом полей


Это сообщение отредактировал(а) MoLeX - 2.2.2012, 07:40


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 2.2.2012, 07:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



да, без полной структуры не понять.. Но если простое перечисление, то пофигу сколько полей smile (в разумных пределах) Главное индексы правильно сделать, чтоб поиск был "приятным"



Это сообщение отредактировал(а) Gold Dragon - 2.2.2012, 07:17


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
$дмитрий
Дата 2.2.2012, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: 3
Всего: 45



Цитата

Есть ли какое-нибудь ограничение?

Цитата

There is a hard limit of 4096 columns per table, but the effective maximum may be less for a given table. The exact limit depends on several interacting factors. 

PM MAIL   Вверх
krundetz
Дата 2.2.2012, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



Цитата(JEEN @  2.2.2012,  00:12 Найти цитируемый пост)
Таблица "Автомобили"
ID | Название | Количество колес | Номер двигателя | Номер рамы | Цвет кузова | Количество дверей | Описание | ...

что тут можно разбить на несколько таблиц? Из необязательных только "Описание".

ну хотябы так:

Таблица основных данных о автомобиле
autoID | Номер двигателя | Номер рамы

Таблица названий автомобилей
autoNameID | Название машины

Таблица названия цветов
colorID | Цвет

Таблица второстепенных данных о автомобиле
autoID | autoNameID | colorID | Описание .....

Цитата(Gold Dragon @  2.2.2012,  07:17 Найти цитируемый пост)
да, без полной структуры не понять..

Тут ещё и логика приложения важна, при одной логике придложенная мной структура выиграет в производительности, при другой проиграет


Это сообщение отредактировал(а) krundetz - 2.2.2012, 10:18


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
$дмитрий
Дата 2.2.2012, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: 3
Всего: 45



Выносить в отдельные таблицы имеет смысл то что повторяется. К примеру Марка/Модель/Модификация, а индивидуальные хар-ки авто должны быть в основной таблицы. Расмазывать по таблицам все подряд не стоит

PM MAIL   Вверх
JEEN
Дата 2.2.2012, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



Цитата

Таблица основных данных о автомобиле
autoID | Номер двигателя | Номер рамы

Таблица названий автомобилей
autoNameID | Название машины

Таблица названия цветов
colorID | Цвет

Таблица второстепенных данных о автомобиле
autoID | autoNameID | colorID | Описание .....

плохой пример привел я. Потому что да, с автомобилями так можно разделить, а у меня нет. Потому что названия все уникальные, как и "цвета"

вот примерно такая таблица у меня:

ого... оказывается 21 поле О_о
Цитата

  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL, - уникальное в 99%, могут быть совпадения, не запрещено
  `type` int(1) NOT NULL, - тут стоит либо 1, либо 0 (например, лыжи - 0, велосипед - 1)
  `sostav` int(1) NOT NULL, - аналогично, 1 или 0
  `culture` int(1) NOT NULL,  - аналогично, но могут быть 0,1,2,3
  `theme` text NOT NULL, - уникальное поле в 90%. Используется 10-300 символов.
  `url` varchar(100) NOT NULL, - уникальное в 95%. Ссылка на сайт
  `perehod` int(5) NOT NULL, - количество переходов по ссылке
  `date_end` datetime NOT NULL, - дата, не уник)
  `judges` text NOT NULL, - 
  `prizes` text NOT NULL, - все 3 поля одинаковые, уникальные, но не обязательные, 30% пустых. Их можно вынести
  `dop` text NOT NULL, - 
  `ok` int(1) NOT NULL, - проверка на модерацию, 0 - все нормально, 1 - не проверял еще
  `rating` int(4) NOT NULL, - рейтинг. Есть еще другая таблица, которая записывает каждый голос. Но я дублирую сумму голосов в эту ячейку, чтобы при выводе не считать заново.
  `img` varchar(15) NOT NULL, - ссылка на изобраение. Кстати, вот еще поле которое можно вынести, наверно. Поле пустое в 30%
  `best` int(1) NOT NULL, - 1 или 0
  `money` int(1) NOT NULL, 1 или 0
  `vznos` int(1) NOT NULL, 1 или 0
  `video` varchar(255) NOT NULL, - ссылка, можно вынесте. Пустое в 90%
  `date_add` datetime NOT NULL, - дата добавления
  `contact` varchar(30) NOT NULL, - контактные данные, пожмно вынести.
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10000 ;


итого я бы вынес это:
prizes | judges | dop | img | video | contact

остается 15 полей

Это сообщение отредактировал(а) JEEN - 2.2.2012, 11:46
PM MAIL   Вверх
$дмитрий
Дата 2.2.2012, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: 3
Всего: 45



Для имитации BOOL лучше использовать тип TINYINT(1)

Добавлено через 2 минуты и 56 секунд
Цитата

итого я бы вынес это:

Зачем?
PM MAIL   Вверх
MoLeX
Дата 2.2.2012, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 7
Всего: 140



Цитата($дмитрий @  2.2.2012,  11:56 Найти цитируемый пост)
Для имитации BOOL лучше использовать тип TINYINT(1)

чем лучше?


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
JEEN
Дата 2.2.2012, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



Цитата

Для имитации BOOL лучше использовать тип TINYINT(1)

ну да, бд давно делал, не знал про tinyint. Что лучше boolean или tinyint(1)? Кстати, есть же еще ENUM и SET

Цитата

Зачем?

чтобы небыло пустых ячеек в основной таблице. Не надо?

Цитата

чем лучше?

TINYINT    1 byte
INT    4 байта

Это сообщение отредактировал(а) JEEN - 2.2.2012, 12:11
PM MAIL   Вверх
Gold Dragon
Дата 2.2.2012, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



у меня маленькое предложение, а не лучше ли некоторые данные вынести вообще в константы которые описать сразу в коде.. Зачем к примеру мне хранить таблицу цветов когда я просто могу сделать массив, а в основной таблице сохранять сразу идентификатор..

Да, кстати, табличка то в основном числовая... smile можно и в одной всё оставить


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1292 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.