Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > возможна ли связь с несколькими таблицами


Автор: BloodWizard 25.5.2011, 07:44
Здравствуйте, уважаемые! Есть таблица со списком товаров, которые могут быть различного типа и три таблички с описанием каждого типа товара
Код

create table price(
id int primary key,
type int,
description_id int,
cena int);


и ещё три таблицы:
Код

create table type1(
id int primary key,
made_by varchar,
model varchar,
camera varchar,
pole1_type1 varchar,
pole2_type1 varchar,
pole3_type1 varchar,);

Код

create table type2(
id int primary key,
made_by varchar,
model varchar,
keys varchar,
pole1_type2 varchar,
pole2_type2 varchar,
pole3_type2 varchar);

Код

create table type3(
id int primary key,
made_by varchar,
model varchar,
keys varchar,
pole1_type3 varchar,
pole2_type3 varchar,
pole3_type3 varchar);



в зависимости от значения поля description_id в таблице price нужно делать связь к нужной из трёх таблице... как этом можно сделать... 

Автор: Zloxa 25.5.2011, 08:46
Цитата(BloodWizard @  25.5.2011,  07:44 Найти цитируемый пост)
в зависимости от значения поля description_id в таблице price нужно делать связь к нужной из трёх таблице... как этом можно сделать... 


Код

select 
  coalesce(type1.made_by,type2.made_by,type3.made_by) as made_by 
...
from price
left join type1 on 1 = price.description_id and type1.id = price.id
left join type2 on 2 = price.description_id and type2.id = price.id
left join type3 on 3 = price.description_id and type3.id = price.id


Добавлено @ 09:00
 smile Кстати, пардон..  быть может под связью вы имели http://ru.wikipedia.org/wiki/Foreign_key?

Если так - натянуть ограничение уникальности на пару (id,description_id) таблицы price, для каждой таблицы добавить поле description_id, для железобетона ограничить содержимое этого поля чеком, и стоить fk по паре (id,description_id)... если движок, конечно, такое позволяет.

Сорри, если не совсем на том диалекте:
Код

alter table pice add constraint price$id_descr$unc unique (id,description_id);
alter table type1 add column description_id int defalut 1 not null ;
alter table type1 add constraint type1$description_id$chk check (description_id = 1);
alter table type1 add constraint type1$price$fk foreign key (id,description_id) references pice(id,description_id);

Автор: Galus 26.5.2011, 04:40
А зачем вообще делать эти 3 дополнительных таблицы? Они же идентичны одна другой. Достаточно одной таблицы. Ну максимум двух, если вам важно значение description_id.

Автор: BloodWizard 27.5.2011, 13:42
Цитата(Galus @ 26.5.2011,  04:40)
А зачем вообще делать эти 3 дополнительных таблицы? Они же идентичны одна другой. Достаточно одной таблицы. Ну максимум двух, если вам важно значение description_id.

Они тут на форуме идентичны в реле они ну очень различаются.

Добавлено через 5 минут и 2 секунды
Цитата(Zloxa @ 25.5.2011,  08:46)
Цитата(BloodWizard @  25.5.2011,  07:44 Найти цитируемый пост)
в зависимости от значения поля description_id в таблице price нужно делать связь к нужной из трёх таблице... как этом можно сделать... 


Код

select 
  coalesce(type1.made_by,type2.made_by,type3.made_by) as made_by 
...
from price
left join type1 on 1 = price.description_id and type1.id = price.id
left join type2 on 2 = price.description_id and type2.id = price.id
left join type3 on 3 = price.description_id and type3.id = price.id


Добавлено @ 09:00
 smile Кстати, пардон..  быть может под связью вы имели http://ru.wikipedia.org/wiki/Foreign_key?

Если так - натянуть ограничение уникальности на пару (id,description_id) таблицы price, для каждой таблицы добавить поле description_id, для железобетона ограничить содержимое этого поля чеком, и стоить fk по паре (id,description_id)... если движок, конечно, такое позволяет.

Сорри, если не совсем на том диалекте:
Код

alter table pice add constraint price$id_descr$unc unique (id,description_id);
alter table type1 add column description_id int defalut 1 not null ;
alter table type1 add constraint type1$description_id$chk check (description_id = 1);
alter table type1 add constraint type1$price$fk foreign key (id,description_id) references pice(id,description_id);

Это получается обращение ко всем таблицам сразу? 

Автор: Zloxa 27.5.2011, 14:04
Цитата(BloodWizard @  27.5.2011,  13:42 Найти цитируемый пост)
Это получается обращение ко всем таблицам сразу?  

Что вас смущает? Вы ведь хотите видеть в одном результате данные сразу из несколькоих таблиц?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)