用于存储文件的数据库设计决策

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类型,并且必须创建一个新表。

这种解决方案听起来不错,但我可能会通过这样的事情进入过度设计的领域。

那么,解决当前问题的最佳解决方案是什么?

我愿意听到其他人的替代选择。

Ben*_*Ben 5

您所建议的(两个建议)都称为非规范化;在关系数据库中,这可能是一件坏事。如果化身,缩略图,描述和标题具有相同的属性,即只有原始文件名和存储文件名,它们都应该放在一个表中,当然,但是您只需要一个列即可标识出哪个。然后,您有另一个表对此进行解码。

例如:

你有一张桌子,有列

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个单独的表,但要到那时为止。