【发布时间】:2018-10-30 08:21:04
【问题描述】:
我有一个网站,管理员将在其中管理多个projects。
就结构而言,project 只是数据库中的一个表。所有项目将共享一些字段,但始终具有与所有其他项目不同的其他字段。此表将保存有关文档的信息。
我的问题是找到描述这一点的最佳方式。因为管理员可以创建任意数量的项目,所以我想为他创建的每个项目创建一个新表。最初,所有表都将具有相同的字段,但我将允许管理员为每个项目表创建字段。
有没有更好的方法来做到这一点?还是创建一个仅包含特定项目字段的表,然后将其与包含所有公共字段的主表连接起来更好?
我的解决方案是为每个项目创建一个表,如下所示:
table_project1(id, title, created_on, project1_field1, project1_field2, ...)
table_project2(id, title, created_on, project2_field1, project2_field2, ...)
等等..
在此示例中,id、title 和 created_on 字段(实际上大约有 10 个共享字段)对于所有项目表都是相同的,但是每个项目表将具有其特定字段(字段也将由管理员创建)
另一个问题是,所有的字段都是由管理员动态创建的,我还必须能够搜索它们,所以我需要跟踪这些创建的字段。
什么是最好或更好的解决方案?
谢谢
【问题讨论】:
-
用一张
project表来跟踪所有项目怎么样 -
如果你为每个项目创建表,那么你可能有数百个表,所以数据库很乱。
-
@AhmedSunny 那么解决方案是什么呢?我无法为每个项目创建包含所有字段的单个表,该表很快就会变大,并且会有数百列。
-
有几个问题你需要问自己,比如这些额外的字段是不是可以在项目创建后多次添加,还是创建后锁定?如果是第一个,也许您可以从 wordpress 选项中启发自己,其中选项在主表中引用,另一个表保存记录。还有,这会不会保存很多数据,你是想为了效率而阻止join,还是没那么重要?
-
这听起来确实是个坏主意。您想解决管理员可以添加字段的问题。这样的字段可能具有三个属性:名称、值以及它是项目的一部分。你去,你有一个表来存储额外的字段,三列。如果您添加一个额外的表格来跟踪管理员添加了哪些字段,您的工作就完成了。
标签: php mysql database database-design