0

我和我的团队正在构建一个可供全球多家企业使用的 SaaS 产品。简而言之,我们的软件会对他们进行一些基本的会计处理,并在某些文件需要更新时提醒他们。

问题是,印度的每家此类公司可能只有 3 个此类文件,但斯里兰卡有 4 个,新加坡有 7 个。每个字段的名称可能不同。例如,这三个字段在印度可能称为“驾驶执照”、“保险”、“许可证”,但在新加坡可能称为“XYZ”、“XXYZ”和“XZY”。

使用 MySQL 实现此类功能的最佳和最有效的方法是什么。假设我可以将此类列的数量限制为 5。此外,我不想在这个项目中使用 NoSQL。

我们正在使用在 CodeIgniter 上运行的 PHP,我们计划在 Engineyard 上进行部署。

4

2 回答 2

2

多租户、单数据库系统有两种方法。该站点显示了一些非常好的解释。

http://msdn.microsoft.com/en-us/library/aa479086.aspx

共享架构或单独架构。

但是除了如何解决多租户问题之外,您的问题似乎也是关于“如何根据国家/地区为不同的公司存储不同的文档类型”,而这个问题与多租户关系并不密切。这是关系数据库设计中更普遍的问题。但这是您可以使用的一种方法:

Country -- basic country list
 \ id
 \ name

Company -- basic information about company
 \ id
 \ name
 \ countryid

DocumentType -- Diffrent types of documents stored
 \ id
 \ name

DocumentTypeCountry -- this linked allowed (or mandatory, as you want to define it) document types to a country
 \ id
 \ documenttypeid
 \ countryid

Document -- the document itself
 \ id
 \ companyid
 \ documenttypeid
 \ moredocumentfields
于 2013-05-01T07:35:06.257 回答
0
CREATE TABLE Countries (
  CountryCode CHAR(2) PRIMARY KEY,
  CountryName VARCHAR(255),
);

CREATE TABLE Companies (
  CompanyID   SERIAL,
  CountryCode CHAR(2) REFERENCES Countries (CountryCode),
  -- etc.
);

CREATE TABLE Documents (
  CountryCode  CHAR(2) REFERENCES Countries (CountryCode),
  DocumentID   INT UNSIGNED,
  DocumentName VARCHAR(255),
  -- etc.
  PRIMARY KEY (CountryCode, DocumentID)
);

CREATE TABLE CompanyDocuments (
  CompanyID   BIGINT UNSIGNED REFERENCES Companies (DocumentID),
  CountryCode CHAR(2)         REFERENCES Countries (CountryCode),
  DocumentID  INT    UNSIGNED,
  Expiry      DATE,
  PRIMARY KEY (CompanyID, DocumentID),
  FOREIGN KEY (CountryCode, DocumentID) REFERENCES
    Documents (CountryCode, DocumentID)
);
于 2013-05-01T07:27:52.787 回答