我是数据库设计的新手。
我对自己的解决方案有疑问,您怎么看?
应为我的在线商店中存储的所有类型文件(图像,附加的电子邮件文件,商店电子邮件正文的文本文件等)创建哪些表?
选项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
答案 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.
这种结构也可以有它的位置,但它通常是可怕的设计,你明智的不要列出它。 (嗯,这对我有什么影响?)