Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我应该如何存储在线商店的产品和产品图像数据?_Php_Mysql_Database Design - Fatal编程技术网

Php 我应该如何存储在线商店的产品和产品图像数据?

Php 我应该如何存储在线商店的产品和产品图像数据?,php,mysql,database-design,Php,Mysql,Database Design,我正在用PHP和MySQL开发一个店面应用程序。我目前将数据存储在4个表中:一个用于产品线,一个用于这些产品线中的特定产品,一个用于产品图像,另一个用于指定哪些图像链接到哪些特定产品。每个特定产品属于一个产品线,每个产品图像可以属于多个特定产品,每个特定产品可以有多个图像。我的桌子是这样的: ProductLines id, name, description, etc. SpecificProducts productLineID id, color, size, et

我正在用PHP和MySQL开发一个店面应用程序。我目前将数据存储在4个表中:一个用于产品线,一个用于这些产品线中的特定产品,一个用于产品图像,另一个用于指定哪些图像链接到哪些特定产品。每个特定产品属于一个产品线,每个产品图像可以属于多个特定产品,每个特定产品可以有多个图像。我的桌子是这样的:

ProductLines
    id, name, description, etc.
SpecificProducts
    productLineID
    id, color, size, etc.
ProductImageLinks
    specificProductID
    imageID
Images
    id, imageFileLocation, name, etc.
这种方式工作得很好,但对于检索来说似乎不是很有效

例如,我有一个页面,其中列出了每个产品线以及从该产品线随机选择的图像的缩略图。为此,我必须首先在数据库中查询所有产品线的列表,然后对每个产品线执行单独的查询,以获取所有具有关联图像的特定产品,选择其中一个,然后再次查询以获取图像

我考虑的另一种可能性是使用一个查询获取我正在查看的所有产品线,第二个查询获取所有这些产品线的所有特定产品,第三个查询获取指定哪些图像链接到哪些特定产品的所有图像链接,第四个查询获取所有这些图像。我想这会更快一些,因为查询的数量减少了,但这会给PHP留下大量的工作来找出产品线、产品和图像之间的连接,这可能同样缓慢

所以我的问题是,有没有更好的方法来存储这些数据?还是根据我已有的数据库更好地检索它?还是我已经确定的两个选择之一真的是我最好的选择


编辑:我实际上并没有在数据库中存储图像文件。图像文件存储在文件系统中。数据库中我的“Images”表只存储图像文件的位置以及有用的信息,如图像标题、alt文本等。

是-只需编写一个查询,即可一次性检索所有信息

我对此有点生疏,但您可以在mysql参考中查找查询

  • 创建一个查询,在适当的键上联接这些表
  • 您需要从检索特定查询的图像的子查询中选择第一项,然后按rand()排序并选择第一项

  • 这完全可以在一个查询中完成。即使不能,您也可以始终创建视图,这有时是一种更好的方式来组织查询,以便它们更具可读性。换句话说,不返回查询结果,只需创建与第一个查询对应的视图。然后创建一个视图,该视图对应于对第一个查询的结果运行第二个查询,该查询在视图之外运行。等等然后,通过从最终视图检索,您的实际查询可以一次完成。

    是-只需编写一个查询,即可一次检索所有信息

    我对此有点生疏,但您可以在mysql参考中查找查询

  • 创建一个查询,在适当的键上联接这些表
  • 您需要从检索特定查询的图像的子查询中选择第一项,然后按rand()排序并选择第一项

  • 这完全可以在一个查询中完成。即使不能,您也可以始终创建视图,这有时是一种更好的方式来组织查询,以便它们更具可读性。换句话说,不返回查询结果,只需创建与第一个查询对应的视图。然后创建一个视图,该视图对应于对第一个查询的结果运行第二个查询,该查询在视图之外运行。等等然后,通过从最终视图中检索,您的实际查询可以一次完成。

    您是否打算将图像存储在mysql数据库中


    在我的类似应用程序中,我只是将图像存储在/images/productimages/imagesize/productid.jpg中,其中imagesize为“小”、“大”等,用于不同的缩略图大小,productid.jpg是SpecificProducts表中的id

    您是否设置将图像存储在mysql数据库中


    在我的类似应用程序中,我只是将图像存储在/images/productimages/imagesize/productid.jpg中,其中imagesize为“小”、“大”等,用于不同的缩略图大小,productid.jpg是SpecificProducts表中的id

    就数据库设计而言,您的设计相当可靠(且标准)。您可以组合ProductImageLinks和Images表,只要它们是1:1的关系,就可以保存一些查询

    对于您的产品线图像检索,您有两个选项可以大大减少所需的查询数量:

  • 在数据库中创建一个名为ProductLineImages的新表。不要从相关产品中随机选取图像,而是在其中加载一组图像,您可以从中随机选择。这种方法不会像以前那样动态,但这是最有效的方法
  • 您可以在单个(但效率低于#1)查询中完成所有描述的操作

  • 就数据库设计而言,您有一个相当可靠(和标准)的设计。您可以组合ProductImageLinks和Images表,只要它们是1:1的关系,就可以保存一些查询

    对于您的产品线图像检索,您有两个选项可以大大减少所需的查询数量:

  • 在数据库中创建一个名为ProductLineImages的新表。不要从相关产品中随机选取图像,而是在其中加载一组图像,您可以从中随机选择。这种方法不会像以前那样动态,但这是最有效的方法
  • 您可以在单个(但效率低于#1)查询中完成所有描述的操作
  • 你什么时候取回i