在运行时创建表与在运行时创建数据库

时间:2010-08-29 10:48:39

标签: php mysql database project-management

我正在为公司构建客户销售和发票应用程序。该应用程序使用PHP MYSQL,但我想这应该不重要。

app结构如下:

网站文件:。php,.htm,images和css

数据库:包含20多个表

该公司目前正在使用该应用程序和其他两个姐妹问题(主要是beta测试)。由于用户群很小,我手动复制网站文件和数据库以设置应用程序以供新的compnay使用。 我正在寻找一种方法,使应用程序更“可扩展”,而无需手动执行“缩放”。(这意味着我不想手动管理三个不同的文件集和dbs) 由于代码是公司中立的,并且数据库包含公司信息,因此我只需要在用户请求设置新公司时重新创建数据库。我可以通过多种方式为新的compnay创建数据库。

  1. 在运行时,我可以使用CREATE DATABASE

  2. 使用20多个表创建一个新数据库
  3. 在运行时,我可以创建额外的20多个表,并使用CREATE TABLES将公司名称作为表的前缀

  4. 我可以在我的所有表格中添加公司列,然后继续像以前一样添加信息。

  5. 新的数据库方法对我很有吸引力,因为备份和维护很容易,因为黑客只能访问一家公司的详细信息(可能......),所以可能会更安全一些。此选项不适用于对数据库数量有限制的共享主机。

    第二个选项意味着我可以在一个数据库中创建所有内容。但这个选项更加“共享”。

    由于MySQL中的表级锁定问题,我不会选择第三个选项(我没有在所有表中使用InnoDb)。

    所以我的选择是在选项1和2之间。开发人员管理了财务应用程序,请建议,因为一旦beta测试阶段完成,使用基数将增加,我不希望手动更改10个数据库和文件集中的相同内容。什么是最好的事情?

1 个答案:

答案 0 :(得分:1)

从安全角度来看,客户应该拥有单独的数据库,这些数据库限制了MySQL用户的访问。 该用户应该只具有应用程序所需的权限(通常是SELECT,INSERT,DELETE和UPDATE),而不是管理权限(DROP,CREATE,GRANT,...)。通过这种方式,您可以清楚地了解数据库和表格 当您需要更改表结构时,只需在数据库上执行(经过全面测试的)SQL查询。

CSS,图像和其他静态内容可以放在子域中,或Alias(Apache)
库和中性类也应放在一个目录中,使用include_path来包含这样的文件,因此只有一个文件集需要更改。