将文件扩展名保存在单独的表中是一种好习惯吗?

时间:2015-10-29 10:10:50

标签: php mysql database-design

我正在开发一个电子商务个人项目。我正在尝试更改我的数据库的结构以满足标准技术。

使用此产品的db设计之后。这是我的表结构:

product table
id  product_name product_price  product_desc product_img  groupeid
1   bag red       2000          bag red cool  bag_red.jpg   2

所以我想将产品表更新为: 的选项1

---------------------------------------------------------------------------
id productname productprice  productdesc  product_img  product_imgExt groupeid
1  bag red        2000        bag red     bag_red          jpg            2
2  shoes yellow   1000        nice shoes  shoes_yellow     jpg            1
3  Tie yellow   1000          nice Tie    tie_yellow       png            1

选项2

---------------------------------------------------------------
img_ext table
id  img_extention
1     jpg
2     png
------------------------------------------------------------------
product table
id  product_name product_price  product_desc product_img  groupeid
1   bag red       2000          bag red cool  bag_red       2
2  Tie yellow   1000            nice Tie      tie_yellow    1    

------------------------------------------------------------------
product_img_table
product_id   img_ext_id
 1             2
 2             1
--------------------------------------------------------------

最好遵循哪个选项:选项1或选项2?

2 个答案:

答案 0 :(得分:2)

“更好”是一种非常主观的判断。

但是,我建议您将对目录(产品表)的理解与您如何呈现该目录的详细信息分开。您存储的图像参考有效地链接到其他一些信息,但我敢打赌,随着您的项目的发展,每个产品需要多个图像。

因此,我的建议是拥有一个包含产品信息的产品表,以及将这些产品与图像相关联的图像表。在图像表中,我会尽可能简单地保存它 - 你存储一个路径,并且没有逻辑上的理由将后缀与路径分开。除非您的电子商务应用程序也在进行一些聪明的图像处理,并且文件类型很重要,否则我只会存储完整路径 - 您拥有的逻辑越少,您编写的代码就越少,并且您为bug创建的机会就越少

所以:

产品

id  product_name product_price  product_desc   groupeid
1   bag red       2000          bag red cool   2

product_images

product_id    size_indicator  image_path
1             S               \images\bag_red.jpg 
1             L               \images\bag_red_large.jpg 

image_path正好是 - 硬盘上图像的路径。在PHP中,您将在结果集中使用该列来绘制<img>标记。如果您想知道图像是小还是大,请查看“size_indicator”列。

答案 1 :(得分:0)

我想一个!对我来说,阅读和逻辑更好。

修改

我会将每个列命名为product_idproduct_namegroupe_id以及PREFIX_products等表格。