List:Spanish« Previous MessageNext Message »
From:reynierpm@gmail.com Date:August 27 2012 2:27pm
Subject:Procedimiento o función? Cual de los dos usar y por
donde comenzar ...
View as plain text  
Hola listeros, tengo un problema y no se que enfoque o solución darle, me
explico:

Resulta que tengo las siguientes tablas:

CREATE TABLE IF NOT EXISTS `default_comment` (
  `comment_id` int(11) NOT NULL AUTO_INCREMENT,
  `friend_id` int(11) NOT NULL,
  `message` text COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `status_id` int(11) NOT NULL,
  `device` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `deleted` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`comment_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `default_friend` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `friend_id` int(8) NOT NULL,
  `user_id` int(8) NOT NULL,
  `is_suscriber` tinyint(1) NOT NULL DEFAULT '1',
  `privacy` tinyint(1) NOT NULL DEFAULT '0',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
  `friend_list_id` int(4) NOT NULL,
  `approved` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `default_profiles` (
  `id` int(9) NOT NULL AUTO_INCREMENT,
  `created` datetime DEFAULT NULL,
  `updated` datetime DEFAULT NULL,
  `created_by` int(11) DEFAULT NULL,
  `ordering_count` int(11) DEFAULT NULL,
  `user_id` int(11) unsigned NOT NULL,
  `display_name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `first_name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `last_name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `updated_on` int(11) unsigned DEFAULT NULL,
  `phone_1` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL,
  `phone_2` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
AUTO_INCREMENT=3 ;

CREATE TABLE IF NOT EXISTS `default_status` (
  `status_id` int(11) NOT NULL AUTO_INCREMENT,
  `message` text COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `privacy` enum('Privado','Publico','Amigos','Amigos de mis amigos')
COLLATE utf8_unicode_ci DEFAULT NULL,
  `user_id` int(11) NOT NULL,
  `device` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `deleted` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`status_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `default_users` (
  `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(60) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `password` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `salt` varchar(6) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `group_id` int(11) DEFAULT NULL,
  `ip_address` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL,
  `active` int(1) DEFAULT NULL,
  `activation_code` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created_on` int(11) NOT NULL,
  `last_login` int(11) NOT NULL,
  `username` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `forgotten_password_code` varchar(40) COLLATE utf8_unicode_ci DEFAULT
NULL,
  `remember_code` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `email` (`email`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
COMMENT='Registered User Information' AUTO_INCREMENT=3 ;

Para probar el "performance" de unas consultas que estoy realizando
necesito insertar como minimo 30 000 o 40 000 registros en esas tablas pero
con alguna que otra particularidad que describo a continuación:

   - En la tabla default_users los campos username y email tienen que ser
   únicos o sea repetidos no están permitidos.
   - En la tabla default_users el campo email deberia ser, en teoria,
   username@stripped (dominio.com por lo de las pruebas)
   - Por cada username en la tabla default_users se debe crear un registro
   en la tabla default_profiles donde el user_id = id de la tabla
   default_users o sea deben coincidir
   - En la tabla default_profiles se deben llenar de forma aleatoria los
   campos display_name, first_name, last_name, phone_1 y phone_2
   - En la tabla default_users se deben llenar de forma aleatoria los
   campos group_id con valores entre 2 y 6 y active con valores 0 o 1
   - En la tabla default_friend se deben crear la misma cantidad de
   registros o mas siempre y cuando se cumpla la condicion de que friend_id y
   user_id no esten repetidos entiendase por repetido que x,y no puede existir
   dos veces o sea en dos registros y de existir 1,2 no puede existir 2,1

Como le entrarían a esto? Un procedimiento? Una función? Alguien que me de
una ayuda conformando este complejo problema? Intente hacerlo desde PHP
pero el script demora demasiado tiempo en ejecución y eso en hosting
compartidos no está permitido :( sugerencias?
Gracias por adelantado
Ing. Reynier Perez Mira
eMail: reynierpm@stripped, reynier. <reynierpm@stripped>perez@stripped
Website: http://www.reynierpm.com
Skype: reynierpm
Mobile: +58 424.180.5609

Thread
Procedimiento o función? Cual de los dos usar y por donde comenzar ...reynierpm@gmail.com27 Aug