Ну, ответ интересный. MySQL 5.6.14, моя версия не остановит вас от создания отношения внешнего ключа с двумя таблицами, но это плохая идея. Позвольте мне показать вам, почему.
Создание 2 мастер-таблицы: test1 и test3
create table test1 (field1 int, primary key (field1));
create table test3 (field1 int, primary key (field1));
Создать зависимую таблицу, которая будет иметь FK отношения с field1 обеих таблиц.
create table test2 (
field0 int,
field1 int,
constraint fk_test2_test1
foreign key (field1)
references test1 (field1),
constraint fk_test2_test3
foreign key (field1)
references test3 (field1)
);
Отлично. Теперь добавим некоторые данные и посмотрим на проблему:
insert into test1 values (1);
insert into test3 values (3);
Мастер-таблицы выполнены. Давайте добавим данные в зависимую таблицу.
insert into test2 values (100, 1);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`test2`, CONSTRAINT `fk_test2_test3` FOREIGN KEY (`field1`) REFERENCES `test3` (`field1`))
insert into test2 values (100, 3);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`test2`, CONSTRAINT `fk_test2_test1` FOREIGN KEY (`field1`) REFERENCES `test1` (`field1`))
insert into test2 values (100, 2);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`test2`, CONSTRAINT `fk_test2_test1` FOREIGN KEY (`field1`) REFERENCES `test1` (`field1`))
Так что ... не делайте этого.
Предложение
create table interface_type (
id int auto_increment,
type_name varchar(30),
primary key (id)
);
create table interface (
id int auto_increment,
interface_name varchar(30),
interface_type int,
primary key (id),
constraint fk_interface_type
foreign key (interface_type)
references interface_type (id)
);
create table `usage` (
id int auto_increment,
interface_id int,
primary key (id),
constraint fk_usage_interface
foreign key (interface_id)
references interface (id)
);
Теперь вы можете добавить различные типы интерфейсов в interface_type
таблицы, такие как:
insert into interface_type (type_name) values ('physical'), ('virtual');
Затем добавьте столько интерфейсов, которые вы хотели бы в interface
, а также указать их в таблице usage
при необходимости.