Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Надо правильно проиндексировать, связать, и составить отношения.

Сообщения:  [1-10]   [11-12] 

 
 автор: F12   (07.06.2006 в 12:51)   письмо автору
 
   для: Trianon   (07.06.2006 в 12:48)
 

Ок. Огромное спасибо.

   
 
 автор: Trianon   (07.06.2006 в 12:48)   письмо автору
 
   для: F12   (07.06.2006 в 11:19)
 

1) TIMESTAMP или DATETIME . cheops посоветует второе :)
2а) да, если пользователь может входить лишь в одну группу.
2б)нет, если пользователь может входить в одну или несколько групп (или не входить ни в одну.) Тогда:
из таблицы USER убрать поле вообще.
создать таблицу usr_grp c полями id, id_user, id_group

   
 
 автор: F12   (07.06.2006 в 11:19)   письмо автору
 
   для: Trianon   (07.06.2006 в 11:12)
 

1) А какой тип посоветуете использовать.

2) т.е сделать ещё одну таблицу:

Таблица GROUP:

id
name


Из таблицы USER удалить grup и добавить groupid.

Я правильно понял?

   
 
 автор: Trianon   (07.06.2006 в 11:12)   письмо автору
 
   для: F12   (07.06.2006 в 11:07)
 

1) Странно, потому что DATE компоненту времени не хранит. Такое впечатление, что Вам время дня не важно.
INT тоже имеет право на жизнь. Хотя бы потому, что код при этом получается значительно менее зависимым от типа сервера БД. Но и INT хранит время (обычно).

2) Тогда уж group.
Группа спроектирована безобразно.
здесь должен быть INT - внешний ключ к таблице с группами.

   
 
 автор: F12   (07.06.2006 в 11:07)   письмо автору
 
   для: Trianon   (07.06.2006 в 11:00)
 

1) TIMESTAMP или DATETIME, а почему странно? (некоторые вообще используют INT)

TIMESTAMP, DATETIME или DATE, какой из этих типов следует ставить и какой из них быстрее.

2) В поле grup будет вносится тип пользователя (admin, moder, user и тд...)

   
 
 автор: Trianon   (07.06.2006 в 11:00)   письмо автору
 
   для: F12   (07.06.2006 в 10:43)
 

Странно, что date хранит DATE а не TIMESTAMP или DATETIME
И несовсем понятно, что такое grup

   
 
 автор: F12   (07.06.2006 в 10:43)   письмо автору
 
   для: F12   (07.06.2006 в 09:43)
 

Кстати вот что получилось, как вам? Может просто надо что-то исправить, добавить. (хочется сделать хорошую, оптимизированную БД)


-- 
-- Структура таблицы 'comment'
-- 

CREATE TABLE 'comment' (
  'id' smallint(5) unsigned NOT NULL auto_increment,
  'userid' smallint(5) unsigned NOT NULL default '0',
  'newsid' smallint(5) unsigned NOT NULL default '0',
  'text' char(180) NOT NULL default '',
  'date' date NOT NULL default '0000-00-00',
  PRIMARY KEY  ('id'),
  KEY 'userid' ('userid'),
  KEY 'newsid' ('newsid')
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

-- 
-- Структура таблицы 'news'
-- 

CREATE TABLE 'news' (
  'id' smallint(5) unsigned NOT NULL auto_increment,
  'userid' smallint(5) unsigned NOT NULL default '0',
  'title' varchar(50) NOT NULL default '',
  'text' text NOT NULL,
  'date' date NOT NULL default '0000-00-00',
  PRIMARY KEY  ('id'),
  KEY 'userid' ('userid')
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

-- 
-- Структура таблицы 'user'
-- 

CREATE TABLE 'user' (
  'id' smallint(5) unsigned NOT NULL auto_increment,
  'name' char(8) NOT NULL default '',
  'password' char(6) NOT NULL default '',
  'mail' char(20) NOT NULL default '',
  'grup' char(4) NOT NULL default '',
  PRIMARY KEY  ('id')
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

   
 
 автор: F12   (07.06.2006 в 09:43)   письмо автору
 
   для: cheops   (07.06.2006 в 00:49)
 

Спасиб за ответ.

   
 
 автор: cheops   (07.06.2006 в 00:49)   письмо автору
 
   для: F12   (06.06.2006 в 15:12)
 

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

Да, primary key сам по себе является индексом и дополнительно его индексировать не нужно.

   
 
 автор: F12   (06.06.2006 в 15:12)   письмо автору
 
   для: cheops   (05.06.2006 в 19:12)
 

2) Какое количество элементов стоит индексировать в полях и почему?

Не совсем то, что я бы хотел услышать. Имелось ввиду: при создании индекса есть параметр размер (или количество элементов) вот скоко их ставить и нужно ли их ставить вообще. Помойму я где то видел что это влияет на скорость.

Кстати если у поля есть primary key, значит индекс ему не нужен? (я про первый id во всех таблицах)

   

Сообщения:  [1-10]   [11-12] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования