如何为大型文本和html字段有效地建立MySQL数据库

如何为大型文本和html字段有效地建立MySQL数据库,mysql,codeigniter,database-design,phpmyadmin,tinymce,Mysql,Codeigniter,Database Design,Phpmyadmin,Tinymce,在我的网站上,我将允许用户在多个所见即所得(TinyMCE)文本字段中插入文本。每个字段都有一个标题,用于导航和一般标识 正在数据库中输入的内容: 多个:输入文本(最多255个字符) 多个:所见即所得编辑器中的HTML/文本(无最大值集) (可能多达20个左右的文本和文本字段) 我的问题是:设置数据库以处理用户生成的内容的正确方法是什么(我应该为文本或其他内容设置20列)?我应该以什么形式将其发送到数据库(只需将其全部合并到一个数组中并发送到数据库或其他什么形式)?我应该限制每个文本字段中的文本

在我的网站上,我将允许用户在多个所见即所得(TinyMCE)文本字段中插入文本。每个字段都有一个标题,用于导航和一般标识

正在数据库中输入的内容: 多个:输入文本(最多255个字符) 多个:所见即所得编辑器中的HTML/文本(无最大值集) (可能多达20个左右的文本和文本字段)

我的问题是:设置数据库以处理用户生成的内容的正确方法是什么(我应该为文本或其他内容设置20列)?我应该以什么形式将其发送到数据库(只需将其全部合并到一个数组中并发送到数据库或其他什么形式)?我应该限制每个文本字段中的文本数量吗

使用:使用phpMyAdmin
同样使用CodeIgniter作为我的php框架

首先,您的框架和phpmyadmin的使用是不相关的,但是当然,为什么不同时使用两者呢?他们只是你的首选,CI将处理相当大规模的项目

也就是说,我建议您在这种情况下使用关系数据库。您可以根据自己的选择进行缩放,因此在您的示例中,让我们假设关系是特定的,就像您有一篇文章和许多与这些文本字段的关系一样,这些文本字段始终是文本字段。我的意思是,它不是任何形式元素类型和任何长度和值的大规模混合体。最后,你应该把它设置成你所需要的,而不需要过多的杀伤力或不合理的限制,比如在文章中添加20个文本字段,不使用关系系统

建立这样一个系统是很容易的。我会解释这个结构,但我假设您理解关系数据库体系结构的概念。我会提供一个链接,但老实说,只要搜索这个词,就会提供大量的资源来填补任何混乱

如果你有一个具体的问题,我可能会更新这篇文章

编辑

相信我,这不会被认为是更大的规模。您不太可能创建一个具有足够关系字段的单一输入表单,仅凭此细节就足以削弱性能。假设您甚至有10个文本字段。更大的问题是tinyMCE或您正在使用的任何WYSIWYG编辑器是否能够顺利处理这么多实例。我从来没有一次使用超过两个,所以我不了解自己。我想你会安全的


获取关系数据所需的时间在很大程度上取决于如何编写查询。我认为CI有一个数据库ORM系统,你可以用它来帮助你,这样你就不会愚蠢地用嵌套在其他IN selects中的insane IN selects编写查询。。。例如在任何情况下,您都需要大量的关系来减缓正确编写的查询的速度。如果你的表单那么大,就把它分成几页。

首先,你的框架和phpmyadmin的使用是不相关的,但是当然,为什么不同时使用这两个呢?他们只是你的首选,CI将处理相当大规模的项目

也就是说,我建议您在这种情况下使用关系数据库。您可以根据自己的选择进行缩放,因此在您的示例中,让我们假设关系是特定的,就像您有一篇文章和许多与这些文本字段的关系一样,这些文本字段始终是文本字段。我的意思是,它不是任何形式元素类型和任何长度和值的大规模混合体。最后,你应该把它设置成你所需要的,而不需要过多的杀伤力或不合理的限制,比如在文章中添加20个文本字段,不使用关系系统

建立这样一个系统是很容易的。我会解释这个结构,但我假设您理解关系数据库体系结构的概念。我会提供一个链接,但老实说,只要搜索这个词,就会提供大量的资源来填补任何混乱

如果你有一个具体的问题,我可能会更新这篇文章

编辑

相信我,这不会被认为是更大的规模。您不太可能创建一个具有足够关系字段的单一输入表单,仅凭此细节就足以削弱性能。假设您甚至有10个文本字段。更大的问题是tinyMCE或您正在使用的任何WYSIWYG编辑器是否能够顺利处理这么多实例。我从来没有一次使用超过两个,所以我不了解自己。我想你会安全的


获取关系数据所需的时间在很大程度上取决于如何编写查询。我认为CI有一个数据库ORM系统,你可以用它来帮助你,这样你就不会愚蠢地用嵌套在其他IN selects中的insane IN selects编写查询。。。例如在任何情况下,您都需要大量的关系来减缓正确编写的查询的速度。如果您的表单那么大,请将其拆分为多个页面。

您留下了许多未说明的需求,因此很难具体说明

但如果我在MySQL中工作,我会这么做

邮政表格:

 post_id    int      primary key   an id number
 field      int      not null      which of the 20 or so text fields this goes with
 user_id    int      not null fk   the user making the post
 active     tinyint                1 = active   2 = invisible to users (deleted)
 (other identifying data as needed)
 posttime   datetime not null      when the post was first created
 edittime   datetime not null      when the post was most recently changed 
                                    (if never changed, the same as posttime)
 title      varchar                text of the post's title
POSTTEXT表

 post_id      int       part of primary key
 posttext_id  int       part of primary key 
 posttext     text      part or all of the post's text
 active       tinyint   1 = active   2 = invisible to users (deleted)
因此,每篇文章在post中有一行,在POSTTEXT中有零行或多行。大多数文章在POSTTEXT中只有一行,但过长的文章可能有几行。POSTTEXT.post_id是一个外键,指向post.post_id。POSTTEXT_id是一个数字,每个不同的帖子从零开始递增

你会问,为什么不把posttext列放在POST表中?好吧,如果你确信你永远不需要让你的用户浏览很长的文章,你可以这样做。您的模式将简单得多。但是,如果系统中有大量十万字的帖子,用户可能希望查看第n页的文本,那么双表解决方案会更好

这种方法的性能比多字段多文本列的表要好得多。在RDMS工作中,您是al