一个大表或规范化的两个表插入选择性能

时间:2013-12-18 09:41:10

标签: sql postgresql normalization

我有以下创建声明:

    CREATE TABLE venues
(
  id integer NOT NULL,
  fs_id varchar,
  name varchar,
  phone varchar,
  address varchar,
  latitude double precision,
  longitude double precision,
  city varchar,
  state varchar,
  country varchar,
  category_fs_id varchar,
  category_name varchar,
  CONSTRAINT pk_venue_id PRIMARY KEY (id)
);

我可以通过一个查询获得我想要的内容,但是列太多了,所以我可以再创建一个表:

CREATE TABLE venues
(
  id integer NOT NULL,
  fs_id varchar,
  name varchar,
  category_fs_id varchar,
  category_name varchar,
  venue_info_id integer,
  CONSTRAINT pk_venue_id PRIMARY KEY (id)
  CONSTRAINT fk_venue_info_id FOREIGN KEY (venue_info_id)
  REFERENCES venue_info (id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION
);


CREATE TABLE venue_info
(
  phone varchar,
  address varchar,
  latitude double precision,
  longitude double precision,
  city varchar,
  state varchar,
  country varchar,
);

但在此之后我应该为select查询中的每个insert和join表写两个查询 是否会降低性能,或者即使在这种情况下我也可以使用一个查询执行此操作?

2 个答案:

答案 0 :(得分:2)

如果所有这些信息都是针对场地的,那么您应将其保存在一个表格中,而不是单独使用表格提供额外信息。根据类型,一张表中最多可包含1600列。 (虽然你可能不应该!)尽量让你的表代表你正在处理的实体 - venue_info并不是一个特定的东西。

虽然我可以看到在你的系统中有一个单独的address表的论据,如果你有许多实体都有需要相同细节的地址。

答案 1 :(得分:1)

我的意见。 由于该表包含所有地址详细信息,因此无需细分。而已。为什么我们分解表结构,goes here。 希望,这个链接可以帮助你。