1

多対多の関係、つまりcontigpathを共有する 2 つのテーブルがあります。

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を作成しました。

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    |       |
+-----------+----------------------+------+-----+---------+-------+

ご想像のとおり、 contig2pathを使用してテーブルcontigpathからデータをリンクしたいと思います。しかし、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 :

-- -----------------------------------------------------
-- 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;
4

2 に答える 2

0

次のようなことを試すことができます:-

Add FOREIGN KEY (id_contig ) REFERENCES conti2path(id_contig)
于 2013-08-11T14:57:47.570 に答える
0

外部キーを作成するには: contig2path から contig と path への参照がそれぞれ 2 つ必要です。これらのキーを次のように作成できます。

ALTER TABLE contig2path ADD CONSTRAINT fkey1 FOREIGN KEY id_contig REFERENCES contig (id_contig);
ALTER TABLE contig2path ADD CONSTRAINT fkey2 FOREIGN KEY id_path REFERENCES path (id_path);

contig2path で主キーを作成するには、テーブルの作成時に次の操作を実行できます。

create table contig2path (
...,
PRIMARY KEY (id_contig, id_path)
)
于 2013-08-11T15:02:23.140 に答える