使用数据库的良好做法 -- 7 领域 和 database 领域 drupal 相关 的问题

Good practices working with databases


5
vote

问题

中文

我正在学习drupal,我想开发一个网站,主要是它的数据库。

我已经拥有数据库的扩展实体关系模型(类型的复杂)。

在创建要由drupal使用的数据库时,采取的正确方向是什么,创建它手动,并使用php在drupal中进行查询,因为它是从头开始的php + mysql站点? Drupal是否提供了更容易的方法来做这件事?

编辑
我不是一个笨拙的开发商。我想知道的是:

  • 在使用数据库时,是使用SQL语法查询数据库的任何更好方法,如我正在开发PHP + MySQL单页面?

我只想知道Drupal开发人员通常在想创建数据库时,插入数据,修改数据或做一些查询并将数据显示给用户。

英文原文

I'm learning Drupal, and I want to develop a website where the main thing is its database.

I already have the Extended Entity-Relationship Model of the database (kind of complex).

What's the right direction to take when creating a database to be used by Drupal, create it manually and do the queries in Drupal using PHP, as it were a PHP+MySQL site from scratch? Does Drupal provide an easier way to do this?

Edit:
I'm not a Drupal experienced developer. What I want to know is:

  • When working with databases, is any better way of doing this that querying the database using SQL syntax, like if I were developing a PHP+MySQL single page?

I just want to know what Drupal developers usually doe when they want to create a database, insert data, modify data, or do some queries and show the data to the users.

     
   
   

回答列表

10
 
vote
vote
最佳答案
 

您的实体关系模型可能会映射到Drupal中所谓的"内容类型" 。

内容类型使用内容构建套件模块定义,通常称为CCK。

使用cck,您可以点击并单击以定义所需的字段 - 要具有的字段 - 文本字段,数字,链接,对其他内容类型的引用,对Drupal站点中的用户引用。

使用定义的内容类型,您可以弄清楚您想要的内容的列表 - 表格,博客式等,并使用视图模块创建该列表。视图是一个点击点击查询构建器,完成了对其他内容类型的排序,过滤,访问控制,动态URL参数和关系(思考加入)。

通常是如何在Drupal中完成"数据库" - 但您完全不必为数据库做任何事情。

如果您有一个非常具体的用例,不能用7000左右的某些组合来解决,然后它可能是抓住"Pro Drupal开发" 的副本和学习模块开发的时间将自定义模块集成到Drupal的其余部分以满足您的确切需求。

 

Your entity-relationship model is likely going to map to what we call 'Content types' in Drupal.

Content types are defined using the Content Construction Kit module, commonly referred to as CCK.

With CCK, you point-and-click to define what fields you want the content type to have - text fields, numbers, links, references to other content types, references to users in your Drupal site.

With the content types defined, you can figure out what kind of lists for that content you want - tabular, blog-style, etc, and use the Views module to create that listing. Views is a point-and-click query builder, complete with sorting, filtering, access control, dynamic URL arguments, and relationships (think joins) to other content types.

That's typically how 'databases' are done in Drupal - but you don't have to do anything with the database at all, really.

If you've got a really specific use case that can't be solved with some combination of the 7000 or so contributed Drupal modules, then it might be time to grab a copy of 'Pro Drupal Development' and learn module development to integrate your custom module into the rest of Drupal to meet your exact need.

 
 
4
 
vote

我的第一反应是这可能是一个过于基本的问题,但反射是值得回答的,因为它对使用Drupal工作的心态是如此基础,您倾向于使用通过模块使用其他人的优秀工作大多数事情,只有必须编写一个小php / sql。

所以,除非您构建Drupal的模块,否则您通常不需要了解底层数据库或它的工作方式。

使用drupal您将是工作内容类型,节点和模块视图和CCK,以构建网站所需的大多数。这些模块是构建块,而不是在较少精心设计的系统中看到的单个插件中的完整丢弃。不要错误地思考Drupal是一个CMS,它更像是一个没有太多编码的标准框架。

您可以从0到95%的功能非常快速地使用核心和一些很好的选择模块。

 

My first reaction is that this is possibly a too-basic question, but on reflection it is worth answering because it is so fundamental to the mindset of working with Drupal that you tend to use the excellent work of others available via modules for most things, and only have to write a little PHP/SQL.

So, unless you're building modules for Drupal you generally don't need to know anything about the underlying database or the way it works.

With Drupal you'll be working Content Types, Nodes, and the modules Views and the CCK to build most of what you need from a site. These modules are building blocks rather than complete drop in plugins that perform a single as one may have seen in less well designed systems. Don't make the mistake of thinking that Drupal is a CMS, it's more like a standard framework without too much coding.

You can get from 0 to 95% of functionality very quickly for most things just using the core and some well chosen modules.

 
 
2
 
vote

免责声明:我不是一个drupal开发人员

每当您使用mysql时,必须计划您希望您的网站使用的存储量。

从个人经验作为MySQL DBA,我已经清理了笨拙的装置和光学化查询,并考虑了一些基本原则。

我为任何Drupal客户做的主要事情是将所有MySQL数据转换为InnoDB 。这将消除表锁定,尤其是在高流量站点。您应该全部意味着使用InnoDB_FILE_PER_TABLE选项。

您应该确保您可以缓存所有InnoDB数据。因此,有足够的记忆来适应该内存。不要忘记调整sort_buffer_size,join_buffer_size,read_buffer_size,read_rnd_buffer_size和max_connections的多个总和。确保MySQL(InnoDB_Buffer_Pool_Size + Key_buffer_size +(sort_buffer_size + join_buffer_size + read_buffer_size + Read_rnd_buffer_size)x max_connections)的总内存不超过安装的RAM的90%。

始终是审查DB层的良好做法。实施这些建议后,当您在数据或连接中具有显着增长时,应考虑DB层维护。否则,它应该是罕见的。

 

DISCLAIMER : I am not a Drupal Developer

Whenever you use MySQL, you must plan for the amount of storage you expect your site to use.

From personal experience as a MySQL DBA, I have cleaned up Drupal installations and Optmized Queries with a few basic principles in mind.

The main thing I do for any Drupal customer is to CONVERT ALL MySQL DATA TO INNODB. This will eliminate table locking, especially in a high traffic site. You should be all means use the innodb_file_per_table option.

You should make sure you can cache all of your InnoDB data. Therefore, have enough memory to accommodate that. Don't forget to tune the sort_buffer_size, join_buffer_size, read_buffer_size, read_rnd_buffer_size and multiple the sum of them by the max_connections. Make sure the total memory consumed by MySQL (innodb_buffer_pool_size + key_buffer_size + (sort_buffer_size + join_buffer_size + read_buffer_size + read_rnd_buffer_size) X max_connections) does not exceed 90% of the installed RAM.

It is always good practice to review the DB Layer. Once you implement these suggestions, DB Layer maintenance should be consider when you have significant growth in data or connections. Otherwise, it should be a rare occurrence.

 
 
1
 
vote

如果你在哪里,你所做的一切都是通过install.php安装网站的,你需要了解数据库的唯一事情是名称,用户和密码,Drupal将照顾其余的。

如果您需要使用某种形式的查询作为用户,您将使用视图模块,再次并不是真正需要了解数据库的任何事情。

如果您在哪里编写自定义代码或填充模块并且需要在数据库中存储信息,则可能需要编写一些查询,并且其他可以通过一些滴水功能来处理。

  • 在第一个地方设置数据库,您将使用 hook_schema(),您只需以所需格式返回架构。

  • 在单个表中写入/更新记录的最佳实践方法是利用 drupal_write_record()

在: http://api.drupal.org/api/drupal/includes--database.inc/group/database/7

还请注意,文档特定于版本。

希望这有点回答你的问题。

 

If you where a general user, all you would do is install the site via install.php, and the only thing you need to know about the database is the name, user and password, Drupal will take care of the rest.

If you where needing to do some form of queries as a user you would use the Views module, again not really needing to know anything about the database.

If you where a developer writing custom code or a contrib module and you needed to store information in the database, you may need to write some queries, and others can be take care of by some Drupal functions.

  • Setting up your database in the first place you would use hook_schema(), where you simply need to return your schema in the required format.

  • A best practice approach to writing/updating records in a single table is to take advantage of drupal_write_record().

There's plenty more reading to be found at: http://api.drupal.org/api/drupal/includes--database--database.inc/group/database/7

Also note that documentation is specific to version.

Hope this somewhat answers your question.

 
 

相关问题

17  如何在有多个功能有多个功能时选择要使用的模块?  ( How do i choose which module to use when there are several options for the same ) 
它并不罕见,找到提供基本相同的功能的多个模块。例如,有许多垃圾邮件控制模块提供极为相似的功能(例如, spamicide 和)。并且有很多不同的分类模块可以做类似的事情。因此,当多个模块满足我的要求时,我应该如何选择使用哪一个? ...

5  如何每次查看节点时执行操作?  ( How to perform an operation every time a node is viewed ) 
在编写模块时,我如何每次用户查看节点时执行一次操作? ...

0  如何生成一个列表,其中包含哪些空格?  ( How to generate a list of which features are enabled in which spaces ) 
我正在使用有机组,特征和空格运行一个Drupal 6.x站点,我对生成一个空格启用的空格的列表有兴趣。优选地,具有沿Y轴的空间的表,以及沿X轴的特征。 关于如何生成此的任何想法?我可以使用视图生成组空间列表,但无法找到已启用功能的字段。 ...

5  批量保存节点与文件字段  ( Bulk saving nodes with a file field ) 
我正在为笨拙网站创建批量上载函数的进度。使用Flash我能够将文件上传到应该能够处理文件的特定URL。 我想做什么,不仅仅是上传文件,而是使用保存到已使用CCK设置的文件字段的文件创建特定类型的节点。由于这些是音频文件,因此文件字段处理文件是重要的,因此可以使用GetID3模块提供其他元数据。 我看了代码/ doc,...

3  如何处理博客标签在贡献主题中?  ( How to handle blog tags in a contrib theme ) 
在博客或博客的网站中,分类通常用于标签和类别。 在Drupal 6中,Node.TPL.php文件可以使用$分类系统,如果它们需要访问与当前节点相关联的UnRended分类链接数组。该变量通常是通过Control主题假设来包含帖子标记和或类别,并且相应地呈现。 在Drupal 7中,$分类学不再可用。 是什么选择...

11  hook_preprocess_page():如何讲述视图页面?  ( Hook preprocess page how to tell a views page ) 
im写一个需要在视图页面中插入一些javascript和css文件的自定义模块。 im使用hook_preprocess_page,但我无法判断当前页面是否来自视图: function mymodule_preprocess_page(&vars) { var_dump($vars); //outpu...

5  Field API与自定义代码  ( Field api versus custom code ) 
如果我需要仅为用户配置文件添加自定义字段,它是否更好地创建使用字段API的模块,或者使用自己的代码以自定义URL显示自定义字段的模块,并保存数据在自己的数据库表中? 字段API无法实现决定哪些字段可对其用户可见的权限;是足以实现自定义代码的原因? ...

5  视图幻灯片VS列表视图+ jQuery Cycle Lite?  ( Views slideshow vs list viewjquery cycle lite ) 
在我的工作站主页上的旋转图像是以列表格式的视图创建。我正在使用 jquery循环Lite 插件,用于旋转效果。 CycliT.Lite.js文件在我的主题的.info文件中的脚本数组中设置,页面中有一点代码.TPL.php检查这是否是主页,如果是,则设置旋转器。< / p> 现在我正在第二个旋转器用于另一个部分,我一...

3  如何使功能仅适用于某些空格?  ( How to make a feature available only to certain spaces ) 
对于Drupal 6开放式庭院站点(即,功能,空格,有机组)我正在运行,我创建了一些自定义功能,只能真正适用于站点上的数百个群体。 它代表,"自定义功能" 配置屏幕显示所有的功能,包括那些我想故意限制到几个特殊群体的那些。 预防每个小组提供这些特殊功能的最佳方法,同时保留了特殊组上的这些功能? ...

4  在子域之间共享登录  ( Login shared between subdomains ) 
如果我应该允许用户使用相同的用户名/密码登录,在以下解决方案之间选择时,我应该考虑什么? 安装,并使用面包店单点登录系统在主站点上,以及所有子域。 共享包含用户数据的数据库表。 ...

3  如何追溯应用Mollom垃圾邮件过滤?  ( How to retroactively apply mollom spam filtering ) 
我被要求清理几年运行的网站,除了大量有效内容之外还累积了一些垃圾邮件。 我刚刚在网站上安装了Mollom,以帮助减少未来的垃圾邮件帖子;但是有些方法可以让Mollom过程已经发布到网站上的内容,并为我的评论销售潜在的垃圾内容(而不是单独查看全部有效内容的所有)? ...

4  直接调用Mollom Captcha  ( Invoke mollom captcha directly ) 
我在ctools form向导中有一个自定义表单,我想使用mollom。有没有API函数,我可以用来将它放在该页面上的表单API中? ...

2  gmap视图模块 - 弹出窗口太大了  ( Gmap views module popups are too big ) 
我正在使用gmap模块及其视图对应。我拥有的问题是,我正在使用自定义文本字段来显示以我从查询中删除的HTML包裹的字段。但是,弹出窗口不会正确尺寸;它最终太大了。这是我的自定义文本字段的代码: <div id="col1"> [field_thtr_img_fid] </div> <div id="col2"...

2  在哪里插入额外的注销功能的最佳位置?  ( Where is the best place to insert additional logout functionality ) 
在用户注销的情况下插入附加逻辑可能会在user.pages.inc中查看 function user_logout() .inc。此代码在核心模块中,您不应该编辑它,但工作得很好...例如,通过将以下代码添加到'user_logout()'函数的顶部... $last_run = variable_get('...

9  以编程方式冒充另一个用户,而不会导致当前登录用户退出  ( Programmatically impersonating another user without causing the currently logged ) 
如何更改全局 $user 的值,执行自己的代码,并恢复 99887664 的原始值,而不会导致当前用户注销如果发生错误? ...

16  模块如何检测输出“访问拒绝”页面?  ( How can a module detect when the access denied page is output ) 
模块如何检测Drupal输出"访问被拒绝" 页面时? 我知道如何用Drupal 6来做;我需要知道如何用Drupal 7进行。 ...

3  如何自动突出显示页面上显示的代码的语法?  ( How to automatically highlight syntax of code displayed on page ) 
我正在开发一个网站,用于从不同的编程语言发布我的代码。我想突出用不同颜色的代码语法。但是,手动这样做是耗时的。 是否有任何模块或方法可以自动执行此操作?严格,它应该以CSS方式完成。 ...

1  自定义SQL:NodeReference Joins和最新视频  ( Custom sql nodereference joins and latest vid ) 
我有一个构成自定义SQL查询的时间。 查询有多个Nodereference,需要返回最新的节点修订版。 我理解得很好,但由于某种原因,返回最新版本的额外复杂性正在绊倒我。 我宁愿通过创建视图并以编程方式执行它们,仅仅因为 WHERE 条款的复杂性,就会以编程方式执行它们。 我已经尝试翻译等同的视图的输出,但是对视图粘...

7  如何创建“逐步处理”内容类型?  ( How might i create a step by step process content type ) 
我正在考虑为Intranet创建一个过程手册。大多数(全部?)的流程都有一个非常明确的订单,尽管实际顺序可能不时改变。该计划是有主题专家,可能是六十多个左右,输入和更新流程页面。该网站的用户需要能够在与客户交互时快速审查流程,通常面对面。 这是我想到的选项: 培训作者使用有序列表。 pro:最容易的。康科:依靠培...

20  如何使用带有自定义表的数据与寻呼机进行排序表?  ( How do you make sortable tables with a pager with data from a custom table ) 
对于Drupal 6,您可以做到这样的事情: $header = array( array('data' => t('Order id'), 'field' => 'order_id'), ... array('data' => t('Transaction time'), 'field' => 'p...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.