首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于外键的连接表

基于外键的连接表
EN

Stack Overflow用户
提问于 2011-03-01 21:12:51
回答 3查看 1.3K关注 0票数 3

我有一个表,其中有许多字段是引用相关表的外键。我正在用PHP编写一个脚本来执行db查询。当我查询这个表的数据时,我需要知道与这些键相关的值,而不是键。

大多数人怎么做这件事?

要做到这一点,101种方法是查询该表的数据(包括外键),然后查询相关表以获取每个键的值。这可能是很多查询(~10)。

问题1: --我想我可以用一堆联接编写一个查询。这样会更好吗?

这种方法还要求查询脚本知道哪些表字段是外键。因为我有很多这样的表,但都有不同的字段,这意味着编写好的泛型函数很困难。MySQL InnoDB表允许外部约束。我知道数据库的设置是正确的。

问题2:,关于查询表和确定约束是什么,然后使用我从问题1中决定的任何过程来匹配约束的想法,我喜欢这个想法,但从未看到它在代码中被使用。让我觉得出于某种原因这不是个好主意。我将使用类似于显示CREATE tbl_name;来查找该表存在哪些约束/关系。

感谢您的任何建议或建议。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-01 21:18:20

您谈到了编写“很好的泛型函数”,但我认为您在这里有点过于通用了。

就我个人而言,我只需要编写一个包含大量连接的查询。如果您想抽象出所有的连接逻辑,而不必担心它,那么您可能应该考虑使用ORM,而不是直接编写SQL。

票数 2
EN

Stack Overflow用户

发布于 2011-03-01 23:09:23

在某种程度上,系统应该使用联接运行查询,无论这些查询是由应用程序程序员显式编写的还是由数据访问层自动生成的。选项1显然比朴素的选项要好。至于其他一些查询创建选项(绝不是详尽的列表):

  • 您可以抽象出所有数据库操作,就像PDO抽象出连接和查询操作(即准备和执行查询)一样。使用此方法获取表元数据(包括外键),然后可以使用外键自动构造查询。
  • 您可以用其他格式(例如XML)编写对象规范,并编写一个类来生成PHP类和数据库表。在企业应用程序中,这比在较小的项目中更多。该选项比其他选项的开销更大,因此,如果您只需要建模几个类,则不适合这样做。这个选项的出现也可能是康韦定律的结果,我第一次听到它是Richard的变体:“系统的结构反映了构建它的组织的结构。”
  • 您可以采用林克-like方法。在PHP中,这意味着编写大量函数或方法,应用程序程序员可以将这些函数或方法链接在一起,从而创建查询。应用程序程序员最终要负责连接表,尽管他们自己从不编写JOIN

更好的问题方法不是考虑如何创建查询,而是考虑如何将DB与应用程序接口。这导致了模式,如数据映射器活动记录,它们属于对象-关系映射 (奥姆)范畴。请注意,一些模式(如AR)、其他ORM技术甚至ORM本身都有自己的问题。上述任何查询创建选项都可以用于实现数据访问模式。

使用SHOW CREATE TABLE的问题是它不适用于大多数(全部?)其他RDBMS。如果你想把你的应用程序和MySQL结合起来,那就去吧,但是这个决定可能会困扰你。

票数 1
EN

Stack Overflow用户

发布于 2011-03-01 22:59:56

在主数据表和查找表中使用的记录计数是什么?

通常情况下,您应该将查找表连接到主表。如果您有过多的连接,并且这里涉及的UDF不多,那么很有可能表会被规范化一些。如果规范化很好,并且主数据表非常宽,则仍然可以将表拆分为具有1:1关系的多个表,以便将频繁访问的列与不经常访问的列分开。

MySQL包括对ANSI目录INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS的支持。您可以使用它来收集有关存在的FK关系的信息。

此外,如果经常使用联接的组合,则根据这些常见操作创建视图或存储过程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5160409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档