> > CREATE TABLE `his_msisdn_imei_activ_hist` (
> > `MSISDN` varchar(23) NOT NULL,
> > `ACTIV_IMEI` varchar(20) NOT NULL,
> > `ACTIV_PHONE_TYPE` varchar(100) NOT NULL,
> > `PREV_IMEI` varchar(20) default NULL,
> > `PREV_PHONE_TYPE` varchar(100) default NULL,
> > `ACTIV_TIME` datetime NOT NULL,
> > PRIMARY KEY (`MSISDN`,`ACTIV_IMEI`,`ACTIV_TIME`)
> > ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
> >   
> 
> This primary key is a bad idea. A VERY VERY bad idea. For starters, a 
> primary key should have ONE field, not THREE. While it is allowed, it's 
> not going to help performance at all. Next is that the primary key 

Care for a fight over this one? :-)

A primary key should be the primary key. If this is 3 columns, or 1
varchar column, it's all fine.

I agree with your point of the ACTIV_TIME being a bad candidate
for being part of a PK though.

Oh, and having multiple columns in a PK does not mean you cannot
create additional indices as/if required.

All in all, your statement about multiple columns in a PK is a very very
bad statement ;-)

> should be a numeric field. You've got varchars and datetimes! Yuck! If 
> you want to enforce a rule such as restricting duplicate values, then 
> start by creating yourself a sane primary key ( an unsigned int, for 
> example ), and *THEN* put an index ( with your "don't allow duplicates" 
> rule ) across your (`MSISDN`,`ACTIV_IMEI`,`ACTIV_TIME`) fields.

Martijn Tonies
Database Workbench - development tool for MySQL, and more!
Upscene Productions
http://www.upscene.com
My thoughts:
http://blog.upscene.com/martijn/
Database development questions? Check the forum!
http://www.databasedevelopmentforum.com

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to