title: Single Table or multiple table- normalisation
body: <p>I have a question that may be simple for you to answer</p>
  
  <p>I have an image table below</p>
  
  <p>An image can have multiple sizes- is it better practice to have three tables</p>
  
  <p>One table for image details
  another table that joins image_details to image_paths and another table- image_sizes that joins to image paths.</p>
  
  <p>Or is it best to put all the image sizes in the image table. In effect I have one image but in different sizes. Looking for the best option for optimisation. All images will have each image sizes so there is no redundancy in the future for some images not having certain sizes. I was unsure if it was best to use another table though in case we add other sizes. However i could add another column to the image table for a new image size</p>
  
  <p><strong>Image_table</strong></p>
  
  <pre><code>CREATE  TABLE IF NOT EXISTS `warrington_main`.`image` (  
    `id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT ,  
    `user_id` BIGINT(20) UNSIGNED NOT NULL ,  
    `alias_title` VARCHAR(255) NOT NULL ,  
    `address_id` BIGINT(20) NULL ,  
    `geolocation_id` BIGINT(20) NULL ,  
    `camera_id` MEDIUMINT(8) NULL ,  
    `title` VARCHAR(100) NOT NULL ,  
    `description` VARCHAR(2000) NOT NULL ,  
    `main_image` VARCHAR(50) NOT NULL ,  
    `thumbnail_image` VARCHAR(50) NOT NULL ,  
    `thumbnail_image_medium` VARCHAR(50) NOT NULL ,  
    `thumbnail_image_small` VARCHAR(50) NOT NULL ,  
    `thumbnail_image_gallery` VARCHAR(50) NOT NULL ,  
    `hits` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0' ,  
    `show_comment` ENUM('0','1') NOT NULL ,  
    `feature_in_gallery` ENUM('0','1') NOT NULL ,  
    `created_on` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' ,  
    `date_taken` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' ,  
    `updated_on` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' ,  
    `updated_by` BIGINT(20) UNSIGNED NOT NULL ,  
    `approved` ENUM('Inprocess','Yes','No') NOT NULL DEFAULT 'Inprocess' ,  
    `visible` ENUM('0','1') NOT NULL DEFAULT '0' ,  
    `account_type_created` ENUM('S','Y', 'G', 'FL', 'FB') NOT NULL ,  
    PRIMARY KEY (`id`) ,  
    UNIQUE INDEX `alias_title` (`alias_title` ASC) ,  
    INDEX `title` (`title` ASC) ,  
    INDEX `approved` (`approved` ASC) ,  
    INDEX `visible` (`visible` ASC) ,  
    INDEX `feature_in_gallery` (`feature_in_gallery` ASC) ,  
    INDEX `fk_image_image_user1_idx` (`user_id` ASC) ,  
    INDEX `fk_image_camera1_idx` (`camera_id` ASC) ,  
    INDEX `fk_image_address1_idx` (`address_id` ASC) ,  
    INDEX `fk_image_geolocation1_idx` (`geolocation_id` ASC) ,  
    INDEX `fk_image_user1_idx` (`updated_by` ASC) ,  
    CONSTRAINT `fk_image_image_user1`  
      FOREIGN KEY (`user_id` )  
      REFERENCES `warrington_main`.`user` (`id` )  
      ON DELETE NO ACTION  
      ON UPDATE NO ACTION,  
    CONSTRAINT `fk_image_camera1`  
      FOREIGN KEY (`camera_id` )    
      REFERENCES `warrington_main`.`camera` (`id` )  
      ON DELETE NO ACTION  
      ON UPDATE NO ACTION,  
    CONSTRAINT `fk_image_address1`  
      FOREIGN KEY (`address_id` )  
      REFERENCES `warrington_main`.`address` (`id` )
      ON DELETE NO ACTION  
      ON UPDATE NO ACTION,
    CONSTRAINT `fk_image_geolocation1`  
      FOREIGN KEY (`geolocation_id` )  
      REFERENCES `warrington_main`.`geolocation` (`id` )  
      ON DELETE NO ACTION  
      ON UPDATE NO ACTION,  
    CONSTRAINT `fk_image_user1`    
      FOREIGN KEY (`updated_by` )    
      REFERENCES `warrington_main`.`user` (`id` )    
      ON DELETE NO ACTION    
      ON UPDATE NO ACTION)    
  ENGINE = InnoDB    
  AUTO_INCREMENT = 23162    
  DEFAULT CHARACTER SET = utf8   
  </code></pre>