2016-07-15 4 views
-1

2つの異なるデータベースに2つのテーブルを作成しました。最初のデータベース名はuserDetailsテーブルを含むユーザで、IDはプライマリキーでuser_nameです。私の2番目のデータベースはcustomerDetailsという1つのテーブルを持ち、1つのIDをプライマリキー、顧客名と上記の1つのビューそのユーザーのテーブルと名前のIDを含むuserテーブル。ビューとテーブル間のプライマリと外部キーのマッピング

私がしたいことは、customerDetailsテーブルにそのビューの外部キーを作成することです。これにより、カスタマーデータベースからビューを通してユーザーテーブルにアクセスできるようになります。私はこれを達成する方法がわかりません。データベースコンセプトを初めて覚えている人なら誰でもこのことから私を救うことができます。

全体のシナリオでは、私がcustomerDetailsでビューからの外部キーとして最後の列で最後のテーブルにしたい

> Database Name : user 
> Table Name : userDetails 
> Fields  : id userName 
> 
> Database Name : customer 
> View Name  : user_view 
> Fields  : id userName 
> 
> Database Name : customer 
> View Name  : customerDetails 
> Fields  : id  custName 

、次の通りです。どうすればこれを達成できますか?

+0

「FOREIGN KEYS」は、表の列に挿入できる内容の制限に使用されます。あなたが探していると思うのは、列でリンクされた2つのテーブルからデータを取得するために使用される 'JOIN'です。 – Fredster

+0

'Views'は' FOREIGN KEYS'に干渉しないように事前に準備された 'SELECT'文です。 – Fredster

+0

はい私はuserDetailsテーブルのデータが必要ですが、userという名前の別のデータベースに存在するので、customerデータベースにアクセスするために、userDetailsテーブルのビューを作成しています。私のcustomerDetailsテーブルに? –

答えて

1

Viewsはではありません。は、外部キーに関連しています。以下では、ジャンクションテーブルを使用してユーザーと企業を横断し、データベース間の外部キー制約を適用します(データベース間の共有情報の悪い考えではありません)。

ジャンクションテーブルは多対多であり、ユーザーと企業を一緒にフックします。

スキーマ:

insert customerDB.customerDetails(custName) values ('Exxon Mobil'); -- id 1 
insert customerDB.userCustomerJunction(userId,custId) values (1,7); -- FK Failure 
-- above line generates an error 1452 as expected 
insert userDB.userDetails(userName) values ('Kelly'); -- id 1 
insert customerDB.userCustomerJunction(userId,custId) values (1,1); -- success, FK's satisfied 

ユーザーと企業が別々のエンティティであることを忘れないでくださいと2が一緒にそれらを結びつける何かを必要とするインターフェイスする:それは

create schema userDB; 
create table userDB.userDetails 
( id int auto_increment primary key, 
    userName varchar(100) not null 
); 

create schema customerDB; 
create table customerDB.customerDetails 
( id int auto_increment primary key, 
    custName varchar(100) not null 
); 

create table customerDB.userCustomerJunction 
( -- a many-to-many mapping 
    id int auto_increment primary key, 
    userId int not null, 
    custId int not null, 
    unique key (userId,custId), -- no dupes allowed 
    foreign key `ucj_2_user` (userId) references userDB.userDetails(id), 
    foreign key `ucj_2_cust` (custId) references customerDb.customerDetails(id) 
); 

テスト。ジャンクションテーブルは、effectiveRightsなどの列を配置する素晴らしい場所です。

ユーザーと企業の間のビューを作成することは、単に結合と同じですが、この場合はデータベースとの間になります。テーブル名の前にwhichDB.があります。ビューは物理的なテーブルに具体化され、表示されます。したがって、物理的なルールとして、物理的にはFKが有効です(データの完全性)。 effectiveRightsの列を追加することで、各ユーザーと企業が一緒にできることを判断するのに役立ちます。はい、このユーザーはこの会社情報に対する一定の権利を持っています。権利ビットマーク、ジャンクションテーブルに表示されます。ジャンクションテーブルの例については、このAnswerを参照してください。