mysql - 如何使自定义 CMS 支持多用户

标签 mysql sql database

我已经制作了一个自定义 CMS,我想将其设为多客户端,同时尽可能减少重复。我指的不是同一组织中的不同人访问同一程序的多用户,我的意思是不同组织中的多客户端使用他们自己对同一程序的访问权限,就好像它们是独立的应用程序一样。

我了解共享函数的原理,我想我需要将我创建的所有函数放在父目录中的共享文件夹中。

我想我至少了解了代码的工作方式,但数据库 (sql) 结构似乎是最大的挑战。

这通常是如何完成的?

我的表格相当基础,经过一些阅读后我发现,简单地向每个表格和条目添加“client_id”或“app_id”或类似内容是正常的。这样就没有数据库的副本,但是您会在同一个表中混合所有客户端数据。如果这个程序变得非常大,那么数据成倍增加,每个人的系统速度也会成倍增加,这似乎会带来问题。然而,我还没有到那个阶段,所以我不应该担心那么远的前方并在它到来时穿过那座桥,因为现在速度牺牲可以忽略不计吗?

如果我将来更改表的结构或添加额外的字段等,是否有可能以某种方式保持数据库分离而不加倍工作?

我知道如果不知道我构建表格的方式,这可能很难回答,但它们非常简单,例如:

unique_id    |      title    |      modified_date       |      content
  xx                hello           0000-00-00 00:00:00       i am content     

到目前为止,我能想到的最好的结果是:

client_id     |    unique_id    |      title    |      modified_date       |      content
 xx                  xx                hello           0000-00-00 00:00:00       i am content     

就像我说的,我看到这可能会遇到一些问题,主要是在赛道上变得臃肿,但现在我看不到另一种方式 - 也许你有另一种方式来看待这个问题。谢谢。

最佳答案

将其作为一个数据库保存,并添加了 client_id 列。如果它因许多客户端而变大,请按 LIST 对表进行分区:http://dev.mysql.com/doc/refman/5.5/en/partitioning-list.html

水平分区允许您对一个逻辑表进行分割,因此当您的 SQL 包含“... WHERE client_id = 1”时,它只需要读取包含“client_id = 1"数据。其他分区将被忽略,就好像每个 client_id 都有一个单独的表一样。

免责声明:我自己没有在 MySQL 中使用分区。我只是熟悉 Oracle 的概念。确保您的 MySQL 存储引擎支持分区:http://dev.mysql.com/doc/refman/5.5/en/partitioning.html

关于mysql - 如何使自定义 CMS 支持多用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7382086/

相关文章:

mysql - 在 NiFi 中将 CSV 数据提取到 MySQL 数据库

mysql - 按列绑定(bind)两个SQL查询的结果

SQL:表到键值表

mysql - 将 SQL 查询转换为 Rails

sql - 我应该转向 NoSQL 吗? (大数据)

mysql - SQL 按标点符号结尾的产品排序

mysql - 限制 LENGTH 语句中的行数

MySQL - 是否可以对表中的所有列使用 LIKE?

sql - 如何从SQL Server 2005中减去两个日期时间值来获得小时数

php - 使用 PHP/MySQL 同时将数据插入多个表