2010-12-07 5 views
1

"link"がこれの正確な用語ではない場合はお詫び申し上げます。MySQLリンクテーブル - ビュー、外部キーまたはトリガ?

私はユーザー情報を持つテーブルを持っています(ユーザー&パスワード)。同じユーザー:パスワードのペアが同じデータベース内の別のテーブルに表示される必要があります。 2番目のテーブルは常に最初のテーブルをコピーする必要があります。エントリが最初のテーブルから削除された場合、または追加された場合、変更は即座に2番目のテーブルに適用される必要があります。

私はGoogleで検索した用語を知らないとして、私は唯一の重複、全体ではなくなるように2つの列を必要とする


..これを行う方法の一例を必要としてください。表。

+0

私はこの上にUnreasonと一緒にいるのですが、なぜ重複した情報を保持したいのですか? 2番目のコピーに追加したり、すぐに削除したりすることは、目的を果たしていないようです。 – Mike

+0

私はちょうどUnreasonの投稿で – DreamWave

+0

私はあなたが外来キーを探していると思うことを説明した。最初のテーブルを参照する外部キーを、適切なカスケードオプションを使用して2番目のテーブルに追加します。この場合、データを複製することはできません。 MySQLの場合、InnoDBストレージエンジンを使用する必要があります(MyISAMは外部キーなどのデータベース整合性機能をサポートしていません)。 –

答えて

5

viewかもしれませんあなたの既存のシステムによって課された制約に応じて、作業してください。imposed by views

CREATE TABLE web_users (username VARCHAR(255), password VARCHAR(255)); 

CREATE VIEW forum_users AS SELECT username, password FROM web_users; 

INSERT INTO web_users VALUES ('user1', 'password1'); 

SELECT * FROM forum_users; 
+----------+-----------+ 
| username | password | 
+----------+-----------+ 
| user1 | password1 | 
+----------+-----------+ 

INSERT INTO forum_users VALUES ('user2', 'password2'); 

SELECT * FROM forum_users; 
+----------+-----------+ 
| username | password | 
+----------+-----------+ 
| user1 | password1 | 
| user2 | password2 | 
+----------+-----------+ 

SELECT * FROM web_users; 
+----------+-----------+ 
| username | password | 
+----------+-----------+ 
| user1 | password1 | 
| user2 | password2 | 
+----------+-----------+ 
+0

これが機能すれば、あなたがロックしていることを意味します。今すぐ試してみましょう – DreamWave

+0

それは可能性がありますが、[Updatable and Insertable Views](http://dev.mysql.com/doc/refman/5.1/ja/view-updatability.html)でかなり長い警告のリストを必ず確認してください。ドキュメンテーション! – Mike

2

これはトリガーで実行できます。

本当の質問は、なぜあなたはデータベースに情報を重複させたいのでしょうか?

+1

重複情報の質問に+1。 – Mike

+0

一つのテーブルは私のウェブサイトのユーザーで構成され、もう一つのテーブルは私がウェブサイト内で実装しているフォーラム(CMS)に属します。私はユーザーが必要です:私のウェブサイトのパスと常に一致するフォーラム。 – DreamWave

+0

両方に同じテーブルを使用するだけではどうですか?あなたが他の人を読むために読むことができれば、アクセスは問題ではないようです。 – Mike

1

使用storage engine as INNODB in mysqlとMySQLでの用語がforeign keyと呼ばれ、それに

2

をインデックス付けを行います。

あなたは

詳細動作するように、このためinnodb storage engineが必要になりますforeign keyとしてnatural keyを使用してしかしhttp://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html


この質問が議論されているいくつかの欠点を持って前に:How to choose my primary key?

+0

私は外来キーの制約が特に問題に関連しているとは思わない。それは必要なトリガーではありませんか? – Mike

+0

hmm ..議論のために開く、合理的なトリガーサウンド、しかし、キーの重複、自然なキーの問題の要因、私は外来のキーを使用してよりきれいにカットすると思います – ajreal

+2

@マイケル、外部キーはトリガーとして実現することができます。この場合、適合することができます - FKの要件では、参照される順序で参照される列に固有の索引があるということですが、これは人為的な制約を生成します(人為的制約が発生します更新を少し遅くする可能性があります)。それ以外の場合は、CASCADE UPDATE(および場合によってはCASCADE DELETE)を使用して1つのテーブルを鉛として使用して、1-1のテーブルになり、トリガーと同じ結果を得ることができます。あまりエレガントではない(実際の関係を示唆している)か、フレキシブルではありますが、うまくいくはずです。 – Unreason