Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एक विदेशी कुंजी के रूप में केवल एक वर्चर के साथ MySQL तालिका

मैंने एक साधारण परीक्षण चलाया: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 संस्करण में।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एकता पर सी # का उपयोग कर MySQL डेटाबेस तक पहुंचना?

  2. Java SQL दिनांक 1 दिन से बंद है

  3. पोलिश अक्षरों का उपयोग करके आदेश दें

  4. क्या मुझे MySQL TEXT प्रकार के लिए PDO PARAM_LOB या PARAM_STR का उपयोग करना चाहिए?

  5. डुप्लिकेट/समान कॉलम मानों वाली पंक्तियां खोजें MySQL