2017-05-02 15 views
0

私はデータベースとテーブルセットを持っています。このシナリオでは、2つの異なる部門が全く同じテーブル構造とサーバーコード/フロントエンドを使用していますが、部門のデータは完全に異なります。同じデータベースにある同じ名前の複数のテーブルを持つMySQL

最も良いことは、正確な構造と異なるデータを持つ2つの異なるデータベースを持つことです。

しかし、これを1つのデータベースに実装しようとすれば可能でしょうか?テーブル名を変更することはできません。テーブルを照会するコード全体を変更する必要があるためです。単一のデータベースにサブフォルダ/ディレクトリを作成する方法はありますか?

私は検索しましたが、おそらくありません。しかし、おそらく誰かが提案できる回避策がありますか?

+0

いいえ、サブデータベースを作成することはできません。別のデータベースを使用してください。 –

答えて

1

Identifier Qualifiersについて読んでください。同じ名前のテーブルは、別々のデータベースにあり、そのデータベース名を修飾子として使用する場合にのみ使用できます。

SELECT * FROM db1.sametablename; 
SELECT * FROM db2.sametablename; 

あなたが同じクエリ内でデータベース間でテーブルを結合することができます

SELECT * FROM db1.sametablename JOIN db2.sametablename; 

あなたも、データベース間で外部キー制約を宣言することができます。

ALTER TABLE db1.sametablename ADD FOREIGN KEY (col1) 
    REFERENCES db2.sametablename (col1); 

データベースは、基本的には、テーブルの名前空間であり、他のオブジェクト。

+1

私はこの回答に同意します。私はデータベース間の結合や参照のファンではありません。長期的にはスケーラビリティを向上させることができます。たとえば、負荷が高すぎるために別のサーバーで1つのデータベースをホストする必要があると判断したとします。これで、一般的に非常に遅い、クロスサーバ結合と参照があります。彼らは常に悪いと言っているわけではなく、ただ気を付けるだけのものです。 – Jason

+1

@Jason、ありがとう、私はあなたの警告に同意します。データベース間の接続を作成すると、それらを分離することはできません。多くの他の例と同様に、可能であれば結合を避けるべきである。私は、データベースが単にMySQLの名前空間に似ていることを指摘しています。 –

関連する問題