2016-07-15 3 views
-1

Я создал 2 таблицы в 2 разных базах данных. Первое имя базы данных - это пользователь, который содержит таблицу userDetails, в которой есть id как первичный ключ и имя пользователя, а вторая моя база данных - это клиент, у которого есть 1 таблица, называемая customerDetails, которая имеет 1 id в качестве первичного ключа и имя клиента и один вид выше пользовательская таблица, содержащая идентификатор этой пользовательской таблицы и имени.Первичное и внешнее сопоставление ключей между представлением и таблицей

Так что я хочу сделать, создавая внешний ключ этого вида в таблице 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 

я хочу в последней таблице, которая находится в customerDetails последней колонке в качестве внешнего ключа из поля зрения. Как я могу достичь этого?

+0

'FOREIGN KEYS' используются для ограничений на то, что вы можете вставить в столбец таблицы. Я думаю, что вы ищете, это 'JOIN', который используется для получения данных из двух таблиц вместе, связанных столбцом. – Fredster

+0

'Views' - ​​это предварительно подготовленные' SELECT' статуты, которые не мешают «FOREIGN KEYS». – Fredster

+0

Да, я хочу данные из таблицы userDetails, но которая присутствует в другой базе данных, называемой пользователем, поэтому для ее доступа в базе данных клиента я создаю представление этой таблицы UserDetails здесь, как я могу использовать идентификатор таблицы userDetails в качестве внешнего ключа в моей таблице CustomerDetails? –

ответ

1

Просмотров: не, связанный с внешними ключами, а также доступ к вашим данным, как указано в комментариях ваших сверстников. В нижеприведенной таблице используется таблица переходов для пересечения пользователей и компаний, обеспечивающая ограничение внешнего ключа между базами данных (не плохая идея для общей информации между базами данных).

Таблица переходов - это много-ко-многим, и они объединяют пользователей и компании.

Схема:

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) 
); 

Попробуй:

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 

Помните, что пользователь и компания отдельные объекты и интерфейсы, имеющиеся в два потребует то, что связывает их вместе. Таблица переходов - это фантастическое место для размещения столбца, такого как effectiveRights или что-то в этом роде. Это будет означать, что пользователь может сделать, например, вставить, обновить, удалить, просмотреть, черный список и т. Д.

Создание представления между пользователем и компанией - это просто как любое соединение, но в этом случае это будет между базами данных с whichDB. перед именем таблицы. Взгляд материализуется и проявляется в физических таблицах. Так как физические правила, физическое имеет FK в силе (целостность данных). И добавление колонки effectiveRights поможет вам определить, что каждый пользователь и компания могут делать вместе: например, да, этот пользователь имеет определенные права на эту информацию о компании и т. Д. С битом прав или отдельными столбцами для прав все в таблице соединений. Пример таблицы соединений см. В этом Answer.

Смежные вопросы