1

次のようなテーブルがあります。

CREATE TABLE `library_mix` (
  `lib_mix_id` VARCHAR(64) NOT NULL ,
  `date` DATE NOT NULL ,
  `index1` VARCHAR(64) NULL ,
  `index2` VARCHAR(64) NULL ,
  `index3` VARCHAR(64) NULL ,
  `index4` VARCHAR(64) NULL ,
  `index5` VARCHAR(64) NULL ,
 ...
  `index96` VARCHAR(64) NULL ,
 ...
)

index1 から index96 までのそれぞれについて、同じ外部キー制約を追加したいと考えています。理想的には、インデックスと fk 制約の両方をプログラム ループで作成したいと考えていますが、MySQL でそれを行う方法が不明であり、良い例が見つかりませんでした。何かのようなもの:

CREATE TABLE `library_mix` (
  `lib_mix_id` VARCHAR(64) NOT NULL ,
  `date` DATE NOT NULL ,

for i = 1 to 96
  `index`$i VARCHAR(64) NULL,
end
...
for i = 1 to 96
  CONSTRAINT `fk_library_mix_lib_id`$i
  FOREIGN KEY (`lib_id` )
  REFERENCES `library` (`lib_id` )
  ON DELETE NO ACTION
  ON UPDATE NO ACTION)
end)

すべてを96回入力する代わりに、これを行う簡単な方法はありますか?

編集

以下のコメントのいくつかに対する私の回答は長すぎたので、ここに追加します。

  • 上記の「ライブラリー」という用語は、(試験管内の) DNA 断片の物理的なコレクションを指します (ライブラリーはこれを表す恐ろしい用語だと思います。
  • 各ライブラリーには、各フラグメントにバーコードが付いており (これも DNA から作成されています)、他の DNA ライブラリーと混合されています (これらのライブラリーのバーコードが異なる場合)。
  • 96 の可能なバーコードがあります (ここでは「index1」から「index96」までで識別されます)。

したがって、この表では、DNA ライブラリーの特定の組み合わせをモデル化しようとしています。外部キー制約は、ライブラリ ID がライブラリ テーブルに存在することを確認することです。

役立つ可能性のある追加情報:

  • 異なる DNA ライブラリは同じバーコードを持つことができます (したがって、一緒に混合することはできません)。
  • DNA ライブラリーは複数のミックスに含まれる場合があります
  • 1 つの DNA サンプルに複数の DNA ライブラリ (同じまたは異なるバーコードを持つ) を含めることができます。

これをモデル化するための、バーコードごとに 1 つの列を使用する方法よりも優れた方法があれば、とてもうれしく思います。

ありがとう!

ケビン

EDIT 2 コメント内の @eggyal による提案は、これに対処する正しい方法です。(私の側の初心者の間違いです。)ありがとう!

4

1 に答える 1

0

私はあなたの質問に答えるつもりですが、ライブラリ間に多対多の関係があり、適切に対処していないようです。egyal と Thomas のコメントは非常に有効です。データベースで適切な 1 対多および多対 1 の関係を作成する方法を調べてください。これにより、この問題がはるかに簡単になります。

制約を簡単に作成するには、MySQL サーバーへの接続を開き、次のコマンドを実行します。

SELECT  CONCAT("CONSTRAINT `fk_library_mix_lib_id`",COLUMN_NAME,"
    FOREIGN KEY (`",COLUMN_NAME,"` )
    REFERENCES `library` (`lib_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION ") AS SQLStatement
FROM INFORMATION_SCHEMA.COLUMNS
WHERE Table_NAME ="library_mix"
AND COLUMN_NAME LIKE "index%"

結果をコピーして新しいクエリ ウィンドウに貼り付け、実行できます。生成される構文はまだテストしていませんが、最小限の労力でクエリを変更して適切な SQL コマンド文字列を作成できるはずです。これは、MySQL データ ディクショナリの知識を確実に強化するための演習として残しておきます。基本的に、MySQL の INFORMATION_SCHEMA ビューについて読んでください。

于 2012-05-24T08:02:09.337 に答える