ale*_*dru 3 sql-server database-design
嗨,我正在处理个人应用程序,并且正面临一个数据库设计决策,我不知道该采取什么行动。这就是我要完成的工作。
在我的应用程序中,我将存储许多由WYSIWYG编辑器生成的图像,视频和一些html文件。我已经决定不将文件存储在数据库中,而是仅存储原始文件名和存储空间文件名(唯一标识符)。
为此,我认为对每种类型的文件都有3个单独的表是一个好主意。
这是我开始遇到一些问题的地方。
此刻,在我分析了自己想要构造的东西之后,我意识到到目前为止我有4种类型的图像:化身,缩略图,描述,标题。这个列表可能会不断增长,直到我完成应用程序为止。对于视频和html文件,还不确定。
到目前为止,在设计数据库时,我看到了2个操作过程。
第一个是我有一个Images表,其中将具有ths属性:
OriginalFileName,StorageFileName,IsAvatar,IsThumbnail,IsDescription,IsHeader
在这种情况下,每次我在应用程序中识别出新的图像类型时,都将不得不修改数据库表,这对我来说听起来并不对。
第二个是我为每种图像类型创建表。
在这种情况下,我将有4个表,这些表具有一个Primary列,一个OriginalFileName列和一个StorageFileName列。
同样,每种类型我都必须标识一种新的Image类型,并且必须创建一个新表。
这种解决方案听起来不错,但我可能会通过这样的事情进入过度设计的领域。
那么,解决当前问题的最佳解决方案是什么?
我愿意听到其他人的替代选择。
您所建议的(两个建议)都称为非规范化;在关系数据库中,这可能是一件坏事。如果化身,缩略图,描述和标题具有相同的属性,即只有原始文件名和存储文件名,它们都应该放在一个表中,当然,但是您只需要一个列即可标识出哪个。然后,您有另一个表对此进行解码。
例如:
你有一张桌子,有列
Files
OriginalFileName, StorageFileName, FileTypeID
Run Code Online (Sandbox Code Playgroud)
然后,FileTypeID将成为第二个表的外键:
FileTypes
ID, Description
1 Avatar
2 Thumbnail
3 Description
4 Header
Run Code Online (Sandbox Code Playgroud)
如果随后要添加另一类型的文件,则向FileTypes添加另一行,然后开始填充表Files。
如果文件具有不同的属性,则可能要考虑4个单独的表,但要到那时为止。