SQL - 引用视图的外键

时间:2017-11-23 22:10:22

标签: sql database-design relational-database

Dunno如何实施以下,请帮助:

假设有以下表格:

create table dc_cities
(
  id integer primary key,
  name varchar(100) not null,
  description varchar(100)
);
create table dc_languages
(
  id integer primary key,
  name varchar(100) not null,
  description varchar(100)
);
create table people
(
  name varchar(100),
  surname varchar(100),
  city integer not null references dc_cities(id),
  language integer not null references dc_languages(id)
);

我想将这两个dc_表合并为单个表格(包括其他任何一种表格):

create table dc_dict
(
  dc_id integer not null,
  id integer not null,
  primary key(dc_id, id),
  name varchar(100),
  description varchar(100)
);
insert into dc_dict(dc_id, id, name) values(1, 1, 'City 1');
insert into dc_dict(dc_id, id, name) values(1, 2, 'City 2');
insert into dc_dict(dc_id, id, name) values(1, 3, 'City 3');
insert into dc_dict(dc_id, id, name) values(2, 1, 'Language 1');
insert into dc_dict(dc_id, id, name) values(2, 2, 'Language 2');
insert into dc_dict(dc_id, id, name) values(2, 3, 'Language 3');

问题是,在这种情况下如何描述/创建外键/引用?当然,可以为每个引用的数据集添加一列,例如:

create table people
(
  id integer primary key,
  name varchar(100) not null,
  surname varchar(100),

  city_dict_id integer not null check(city_dict_id=1) default 1,
  city integer not null,
  foreign key(city_dict_id, city) references dc_dict(dc_id, id),

  language_dict_id integer not null check(language_dict_id=2) default 2,
  language integer not null,
  foreign key(language_dict_id, language) references dc_dict(dc_id, id)
);

但目前还不清楚,需要额外的空间等。 我需要一个可移植的解决方案,因此我不能使用“虚拟”列,因为它们具有不同的语法甚至不支持(例如在PostgreSQL中)。此外,无法在视图中使用外键或在外键声明中使用常量。 当然,它可以使用触发器完成,但它不透明,我不想将声明与功能混合。 请分享您的经验 - 有没有一种正确而优雅的方式来实现它?

谢谢。

0 个答案:

没有答案