我正在設計一個存儲與網站相關的SEO指標的網絡應用程序。有大約50個與每個網站有關的指標每天計算和存儲。我需要能夠隨着時間的推移跟蹤這些指標中的每一個的變化。我根據我對標準化的理解設計了以下模式。這似乎是聯結表(tbl_website_metric)會非常快速地增長非常大。我想知道這是否是最佳模式,或者是否有任何設計錯誤。爲許多屬性存儲歷史數據時,聯結表是否正確?
CREATE TABLE `tbl_website` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(100) NOT NULL ,
`domain` VARCHAR(100) NULL ,
`url` VARCHAR(100) NULL ,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
CREATE `tbl_metric` (
`id` INT NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(45) NOT NULL ,
`description` VARCHAR(100) NULL ,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
CREATE `tbl_website_metric` (
`id` INT NOT NULL AUTO_INCREMENT ,
`metric_id` INT NOT NULL ,
`website_id` INT NOT NULL ,
`created` TIMESTAMP NULL ,
`value` VARCHAR(45) NULL ,
PRIMARY KEY (`id`) ,
CONSTRAINT `fk_tbl_website_metric_tbl_metric1`
FOREIGN KEY (`metric_id`)
REFERENCES `tbl_metric` (`id`)
CONSTRAINT `fk_tbl_website_metric_tbl_website1`
FOREIGN KEY (`website_id`)
REFERENCES `tbl_website` (`id`))
ENGINE = InnoDB;
這是非常有益的感謝。您的替代解決方案無法正常工作,因爲度量標準是獨立更新的,因此需要有與每個標準相關聯的時間戳。你同意嗎? – Michelle
@Michell:好的!如果要求確實是爲每個指標網站對保留單獨的時間戳,則替代方法不起作用。我認爲在網站上次記錄指標時保留時間戳可能沒問題 – Abhay