应创建哪些表来存储在线应用程序的所有类型的文件?

时间:2010-05-31 14:54:48

标签: mysql database database-design

我是数据库设计的新手。

我对自己的解决方案有疑问,您怎么看?

应为我的在线商店中存储的所有类型文件(图像,附加的电子邮件文件,商店电子邮件正文的文本文件等)创建哪些表?

选项1:对文件类型使用单独的表

files{
id
files_types_id FK
file_path
file_extension
}

files_types
id
type_name (unique)
}

选项2:对每种文件类型使用bool字段

files{
id
file_path
file_extension
is_image_main
is_image_icon
is_image_logo
is_pdf_file
is_text_file
}

选项3:为每种文件类型使用一个ENUM字段“file_type”

files{
id
file_path
file_extension
file_type (image_main,image_icon,image_logo,image_main,pdf,text) **enum**
}

谢谢你,Yosef

1 个答案:

答案 0 :(得分:2)

我会选择选项1 - 这是“经典”完全规范化的形式。

我认为选项3是“穷人的规范化” - 该列仍然受限于有限的类型集,但是您没有为数据库用户提供可用类型的列表。 (在SQL Server中,这将通过CHECK约束完成。)根据您的项目和数据的相关性(缺乏),这可能值得做,但“文件类型”信息是有用且重要的,我不会想隐藏它。

要完成,我将在选项4中为每种类型的文件创建一个表:

files_text{ 
id 
file_path 
file_extension 
} 

files_pdf{ 
id 
file_path 
file_extension 
} 

files_image_main{ 
id 
file_path 
file_extension 
} 

etc.

这种结构也可以有它的位置,但它通常是可怕的设计,你明智的不要列出它。 (嗯,这对我有什么影响?)