मैंने एक साधारण परीक्षण चलाया:3 टेबल बनाएं, एक डेटा को दो कॉलम के साथ रखने के लिए, और आईडी (इंट) और डेटा (वर्कर [120]), एक और टेबल जो आईडी को विदेशी कुंजी के रूप में उपयोग करती है और आखिरी वाला जो उपयोग करता है डेटा को विदेशी कुंजी के रूप में:
CREATE TABLE `dados` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(120) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`) USING BTREE,
KEY `idx` (`id`,`name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `refINT` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`dado` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `id` (`dado`),
CONSTRAINT `id` FOREIGN KEY (`dado`) REFERENCES `dados` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `refSTR` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`dado` varchar(120) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `nome` (`dado`),
CONSTRAINT `nome` FOREIGN KEY (`dado`) REFERENCES `dados` (`name`) ON DELETE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
प्रत्येक तालिका में 100 रिकॉर्ड सम्मिलित किए गए और अंतिम तालिका आकार की तुलना की गई:
dados: 192.0 KB
refINT: 32.0 KB
refSTR: 32.0 KB
तो मुझे लगता है कि डेटा वर्चर विदेशी कुंजी में दोहराया नहीं गया है, ठीक है, कम से कम MySQL 5.1 संस्करण में।