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を参照してください。
「FOREIGN KEYS」は、表の列に挿入できる内容の制限に使用されます。あなたが探していると思うのは、列でリンクされた2つのテーブルからデータを取得するために使用される 'JOIN'です。 – Fredster
'Views'は' FOREIGN KEYS'に干渉しないように事前に準備された 'SELECT'文です。 – Fredster
はい私はuserDetailsテーブルのデータが必要ですが、userという名前の別のデータベースに存在するので、customerデータベースにアクセスするために、userDetailsテーブルのビューを作成しています。私のcustomerDetailsテーブルに? –