每个客户数据库设计的架构警告是什么

时间:2013-01-27 11:39:42

标签: postgresql database-design database-schema multi-tenant

我正在为多个客户使用设计应用程序。我最终使用每个客户布局的模式创建单个数据库设置,如下所示:

CREATE TABLE public.companies
(
  id serial NOT NULL,
  name long_name NOT NULL,
  registration_number character(11),
  address character varying(256),
  CONSTRAINT "CompaniesPrimaryKey" PRIMARY KEY (id )
);

CREATE TABLE public.banks(.. );
CREATE TABLE public.calendars(.. );

-- Schema definition - none of the tables have company_id key
-- company_1 schema
CREATE TABLE company_1.employees
(
  id serial NOT NULL,
  first_name character varying(30),
  middle_name character varying(30),
  last_name character varying(50),
  bank_id integer,
  CONSTRAINT employees_pkey PRIMARY KEY (id )
);

CREATE TABLE company_1.contracts
(
  id serial NOT NULL,
  employee_id integer,
  calendar_id integer,
  CONSTRAINT contracts_pkey PRIMARY KEY (id )
)

-- company_2 schema same as schema company_1
-- and so on ...

在每次讨论中,我都有一些关于数据库设计的争论,有人说它有问题,但是没有人可以说什么,只是直觉。

它有什么问题吗?这个设计的真正警告是什么?

1 个答案:

答案 0 :(得分:1)

问题是,在架构更改的情况下,您必须升级所有这些,以便应用程序找到一致的结构。您的升级脚本必须是所有这些脚本的原子。

如果这些表位于同一个数据库中,因为您可以将升级脚本包装在事务中,那么该数据库应该不会太糟糕。

另一方面,如果您使用每个客户数据库,并且RDBMS不支持每个事务多个数据库,那么您可能会升级某些客户,同时“崩溃”其他客户。

此外,如果您愿意,也不能让一位客户轻松地从其他客户那里阅读(例如,您可能希望为所有客户提供由所有客户的数据填充的自动完成列表)。

相关问题