我和我的团队正在构建一个SaaS产品,供世界各地的多家企业使用。简而言之,我们的软件对它们进行了一些基本的计算,并在某些文件需要更新时提醒它们。
问题是,印度每家公司可能只有3份此类文件,但斯里兰卡有4家,新加坡有7家。每个字段的名称可能不同。例如,这三个字段在印度可能被称为“驾驶执照”,“保险”,“许可”,但在新加坡可能被称为“XYZ”,“XXYZ”和“XZY”。
使用MySQL实现此类功能的最佳和最有效的方法是什么。假设我可以将这些列的数量限制为5.另外,我不想在这个项目中使用NoSQL。
我们正在使用在CodeIgniter上运行的PHP,我们计划在Engineyard上部署。
答案 0 :(得分: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
答案 1 :(得分: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)
);