many-to-many 관계, 즉 contig 및 경로을 공유하는 두 개의 테이블이 있습니다. 당신은 아마 상상Mysql - 외래 키로 기본 키 사용
mysql> describe contig2path ;
+-----------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------------------+------+-----+---------+-------+
| id_contig | smallint(5) unsigned | NO | PRI | NULL | |
| id_path | tinyint(3) unsigned | NO | PRI | NULL | |
+-----------+----------------------+------+-----+---------+-------+
것은, 내가 좋아하는 것까지 :
mysql> describe contig ;
+-------------------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+----------------------+------+-----+---------+-------+
| id_contig | smallint(5) unsigned | NO | PRI | NULL | |
| length | smallint(5) unsigned | NO | | NULL | |
| total_rc | int(11) | NO | | NULL | |
| rc_es1 | smallint(6) | NO | | NULL | |
| rc_es2 | smallint(6) | NO | | NULL | |
| rc_ls1 | smallint(6) | NO | | NULL | |
| rc_ls2 | smallint(6) | NO | | NULL | |
| rpkm_es1 | float(10,2) | NO | | NULL | |
| rpkm_es2 | float(10,2) | NO | | NULL | |
| rpkm_ls1 | float(10,2) | NO | | NULL | |
| rpkm_ls2 | float(10,2) | NO | | NULL | |
| hit_id_nr | varchar(50) | YES | | NULL | |
| hit_id_tair | varchar(50) | YES | | NULL | |
| hit_id_uniprot | varchar(50) | YES | | NULL | |
| hit_desc_nr | text | YES | | NULL | |
| hit_desc_tair | text | YES | | NULL | |
| hit_desc_uniprot | text | YES | | NULL | |
| bayseq_likelihood | float(11,9) | YES | | NULL | |
| bayseq_fdr | float(11,9) | YES | | NULL | |
| deseq_fc | float(10,2) | YES | | NULL | |
| deseq_log2fc | float(10,2) | YES | | NULL | |
| deseq_pval | double | YES | | NULL | |
| deseq_padj | double | YES | | NULL | |
| edger_logconc | double | YES | | NULL | |
| edger_log2fc | double | YES | | NULL | |
| edger_pval | double | YES | | NULL | |
| edger_fdr | double | YES | | NULL | |
+-------------------+----------------------+------+-----+---------+-------+
하고 연결하기 위해
mysql> describe path ;
+-----------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------------------+------+-----+---------+-------+
| id_path | tinyint(3) unsigned | NO | PRI | NULL | |
| path_name | text | NO | | NULL | |
| path_nseq | smallint(5) unsigned | NO | | NULL | |
| path_map | varchar(8) | NO | | NULL | |
| path_pix | varchar(28) | NO | | NULL | |
+-----------+----------------------+------+-----+---------+-------+
, 나는 "크로스 테이블", 즉 contig2path을 생성 contig2path을 사용하여 표의 데이터를 연결하십시오. contig 및 경로. 하지만 JOIN을 사용하기 전에 테이블을 외래 키와 연결해야합니다.
-> contig.id_contig would be linked to conti2path.id_contig
-> path.id_path would be linked to contig2path.id_path
내 질문은 : 기본 키를 외래 키로 만들려면 어떻게해야합니까?
편집 :
인접 :
CREATE DATABASE IF NOT EXISTS `nutsedge` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `nutsedge` ;
-- -----------------------------------------------------
-- Table `nutsedge`.`contig`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `nutsedge`.`contig` ;
CREATE TABLE IF NOT EXISTS `nutsedge`.`contig` (
`id_contig` SMALLINT UNSIGNED NOT NULL ,
`length` SMALLINT UNSIGNED NOT NULL ,
`total_rc` INT NOT NULL ,
`rc_es1` SMALLINT NOT NULL ,
`rc_es2` SMALLINT NOT NULL ,
`rc_ls1` SMALLINT NOT NULL ,
`rc_ls2` SMALLINT NOT NULL ,
`rpkm_es1` FLOAT (10,2) NOT NULL ,
`rpkm_es2` FLOAT (10,2) NOT NULL ,
`rpkm_ls1` FLOAT (10,2) NOT NULL ,
`rpkm_ls2` FLOAT (10,2) NOT NULL ,
`hit_id_nr` VARCHAR(50) NULL ,
`hit_id_tair` VARCHAR(50) NULL ,
`hit_id_uniprot` VARCHAR(50) NULL ,
`hit_desc_nr` TEXT NULL ,
`hit_desc_tair` TEXT NULL ,
`hit_desc_uniprot` TEXT NULL ,
`bayseq_likelihood` FLOAT (11,9) NULL ,
`bayseq_fdr` FLOAT (11,9) NULL ,
`deseq_fc` FLOAT (10,2) NULL ,
`deseq_log2fc` FLOAT (10,2) NULL,
`deseq_pval` DOUBLE NULL,
`deseq_padj` DOUBLE NULL,
`edger_logconc` DOUBLE NULL,
`edger_log2fc` DOUBLE NULL,
`edger_pval` DOUBLE NULL,
`edger_fdr` DOUBLE NULL,
PRIMARY KEY (`id_contig`))
ENGINE = InnoDB;
SELECT 'NUTSEDGE DATABASE CREATED';
SHOW warnings;
경로 :
-- -----------------------------------------------------
-- Table `nutsedge`.`path`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `nutsedge`.`path` ;
CREATE TABLE IF NOT EXISTS `nutsedge`.`path` (
`id_path` TINYINT UNSIGNED NOT NULL ,
`path_name` TEXT NOT NULL ,
`path_nseq` SMALLINT UNSIGNED NOT NULL ,
`path_map` VARCHAR(8) NOT NULL,
`path_pix` VARCHAR(28) NOT NULL,
PRIMARY KEY (`id_path`))
ENGINE = InnoDB;
SELECT 'PATHWAY TABLE CREATED';
SHOW warnings;
contig2path :
,369 당신은 테이블이 생성 된 방법을 사용할 수있다-- -----------------------------------------------------
-- Table `nutsedge`.`contig2path`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `nutsedge`.`contig2path` ;
CREATE TABLE IF NOT EXISTS `nutsedge`.`contig2path` (
`id_contig` SMALLINT UNSIGNED NOT NULL ,
`id_path` TINYINT UNSIGNED NOT NULL ,
PRIMARY KEY (`id_contig`,`id_path`))
ENGINE = InnoDB;
SELECT 'CONTIG2PATHWAY TABLE CREATED';
SHOW warnings;
당신이 그들에 기본 키가되고 싶어요 것입니다 왜 링크 테이블, 특히 복합 재료? 나에게 기본 키를 제거하고 둘 다 외래 키로 만드는 것이 더 바람직하다. (둘 모두 참조이기 때문에) 필요하다면 대신 고유 인덱스를 추가하여 중복을 피할 수있다. –
나는 너에게 동의한다, 나는 그 의미에서 시도 할 것이다, 고마워! – Ravenskud