我有可能是簡單的一個問題爲您解答單個表或多個表 - 規範化
我有一個形象見下表
的圖像可以有多個尺寸─是更好的做法有三表格
一個表格用於圖像細節 另一個表格將image_details連接到image_paths,另一個表格連接到圖像路徑的image_sizes。
還是最好把所有的圖像大小放在圖像表中。實際上,我有一個圖像,但大小不同。尋找優化的最佳選擇。所有圖像將具有各種圖像尺寸,因此未來某些不具有特定尺寸的圖像不會有冗餘。我不確定是否最好使用其他表格,但如果我們添加其他尺寸的話。但是我可以另一列添加到圖像表爲新的圖像大小
Image_table
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
數據冗餘在哪裏? – Prescott
如果尺寸出現在單個表格中,則圖像數據將是多餘的,因爲多行將具有相同的圖像信息。 – SiB
也許我讀錯了 - 我讀它作爲他的一個表解決方案看起來像這樣:'ImageID | Detail1 | Detail2 .. | SmallImageURL | MediumImageURL ...',其中每個ImageID都具有所有的ImageURL。如果每個值都不同但沒有冗餘 - 即,如果一個image_details可以屬於一個圖像,並且每個大小的圖像都是不同的路徑,那麼我沒有在那裏看到冗餘 – Prescott