1

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

正在输入数据库的内容: 多个:来自输入的文本(最多 255 个字符) 多个:来自 WYSIWYG 编辑器的 HTML/文本(没有最大设置)(可能多达 20 个左右的文本和文本字段)

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

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

4

2 回答 2

3

首先,您的框架和 phpmyadmin 的使用是无关紧要的,但可以肯定的是,为什么不两者都使用呢?他们只是偏爱你,CI 将处理相当大的项目。

话虽如此,我建议您在这种情况下使用关系数据库。您可以根据自己的选择对其进行缩放,因此对于您的示例,我们假设关系是特定的,就像您有一篇文章以及与这些文本字段的许多关系,这些文本字段始终是文本字段。我的意思是它不是任何表单元素类型和任何长度和值的大量混合。最后,您应该将其设置为做您需要的事情,而不会出现大量过度杀伤或腐败限制,例如在您的文章中添加 20 个文本字段并且不使用关系系统。

建立这样的系统非常容易。我会解释结构,但我假设您了解关系数据库架构的概念。我会提供一个链接,但老实说,只是搜索该术语应该提供大量资源来填补任何混淆。

如果您有具体问题,我可能会更新此帖子。

编辑

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

获取关系数据所需的时间很大程度上取决于您编写查询的方式。我认为 CI 有一个数据库 ORM 系统,您可以使用它来帮助解决这个问题,这样您就不会愚蠢地编写一个嵌套在其他 IN 选择中的疯狂 IN 选择的查询......例如。在任何情况下,您都需要绝对荒谬的关系才能减慢正确编写的查询。如果您的表单那么大,请将其拆分为页面。

于 2012-09-29T00:23:50.800 回答
3

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

但是,如果我在 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 工作中,处理多个相似的行几乎总是比处理具有大量列的真正宽行要好。

于 2012-09-29T00:43:01.463 回答