Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当一个表子对象与另一个表子对象发生冲突时,在3个表之间保持优化的引用完整性_Sql_Postgresql - Fatal编程技术网

Sql 当一个表子对象与另一个表子对象发生冲突时,在3个表之间保持优化的引用完整性

Sql 当一个表子对象与另一个表子对象发生冲突时,在3个表之间保持优化的引用完整性,sql,postgresql,Sql,Postgresql,假设我们有3个表,如下所示- CREATE TABLE countrymaster ( id serial NOT NULL, country character varying(255) NOT NULL, currency character varying(255) NOT NULL, created_on character varying(255) NOT NULL, updated_on character varying(255) DEFAULT NULL::

假设我们有3个表,如下所示-

 CREATE TABLE countrymaster
(
  id serial NOT NULL,
  country character varying(255) NOT NULL,
  currency character varying(255) NOT NULL,
  created_on character varying(255) NOT NULL,
  updated_on character varying(255) DEFAULT NULL::character varying,
  idcompany integer NOT NULL,
  iduser integer NOT NULL,
  status status DEFAULT '1'::status,
  CONSTRAINT countrymaster_pkey PRIMARY KEY (id),
  CONSTRAINT countrymaster_idcompany_fkey FOREIGN KEY (idcompany)
      REFERENCES companies (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT countrymaster_iduser_fkey FOREIGN KEY (iduser)
      REFERENCES users (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
);

CREATE TABLE regionmaster
(
  id serial NOT NULL,
  region_name character varying(255) NOT NULL,
  region_code character varying(255) NOT NULL,
  created_on character varying(255) NOT NULL,
  updated_on character varying(255) DEFAULT NULL::character varying,
  idcountry integer NOT NULL,
  idcompany integer NOT NULL,
  iduser integer NOT NULL,
  status status DEFAULT '1'::status,
  CONSTRAINT regionmaster_pkey PRIMARY KEY (id),
  CONSTRAINT regionmaster_idcompany_fkey FOREIGN KEY (idcompany)
      REFERENCES companies (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT regionmaster_idcountry_fkey FOREIGN KEY (idcountry)
      REFERENCES countrymaster (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT regionmaster_iduser_fkey FOREIGN KEY (iduser)
      REFERENCES users (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
);

CREATE TABLE statemaster
(
  id serial NOT NULL,
  state_name character varying(255) NOT NULL,
  created_on character varying(255) NOT NULL,
  updated_on character varying(255) DEFAULT NULL::character varying,
  idcountry integer NOT NULL,
  idregion integer,
  idcompany integer NOT NULL,
  iduser integer NOT NULL,
  status status DEFAULT '1'::status,
  CONSTRAINT statemaster_pkey PRIMARY KEY (id),
  CONSTRAINT statemaster_idcompany_fkey FOREIGN KEY (idcompany)
      REFERENCES companies (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT statemaster_idcountry_fkey FOREIGN KEY (idcountry)
      REFERENCES countrymaster (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT statemaster_idregion_fkey FOREIGN KEY (idregion)
      REFERENCES regionmaster (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT statemaster_iduser_fkey FOREIGN KEY (iduser)
      REFERENCES users (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
);
如何在三者之间保持优化的引用完整性

假设我有一个国家印度。在印度有北、南、东、西四个地区,在北部地区我有克什米尔、德里、上、钦奈

假设,现在我必须将所有地区都改为中国。我如何在statemaster表中以优化的方式反映它


请推荐任何人。我如何处理这种情况。

你在国家和州之间设置了一个FK,这给自己带来了一个问题。没有直接关系:这种关系是:

一个国家有一个地区 一个地区有一个国家 这确实意味着一个州也有一个国家,但它不是直接的,而是通过地区

实际上,你已经将这种关系非规范化了。要输入正确的3NF,您需要去掉州和国家之间的FK,并从州中删除countryId。当你想知道一个州所在的国家时,你需要通过它所涉及的地区行,然后是该地区所涉及的国家行来查看


遗憾的是,这似乎效率较低,但如果不这样做,确实会造成问题。在实践中,非规范化只有在低效率增长过大时才能实现——系统变得太慢。我从未发现这种特殊类型的关系会出现需要反规范化的问题。

你好,朋友,我知道这种结构不在3NF中,因为我们需要这样一个系统。因为在我们的系统中,一个州可能在一个地区之下,也可能不在一个国家之下,但必须在一个国家之下,所以我必须将外键与国家放在一起。希望你现在能理解我的问题。我可以这样做的一种方法是在每个国家下添加一个“未知”或“无区域”或任何区域,然后将该区域内没有区域的州与该国联系起来。