Django中不同类型图片的数据库设计

时间:2012-04-24 01:25:13

标签: mysql django database-design django-models django-contenttypes

下午好,

我正在设计一个应用程序,我似乎无法理解这个问题。我的应用程序将有不同类型的图片:公司,个人资料,机器等...我们期待很多图片。现在,因为我们将有很多不同类型的图片,我想在Django中创建一个名为“pictures”的基类,然后从中创建所有子类。这将在我的数据库中提供n个表。因此查询会更快,因为我没有一张包含所有照片的巨型桌子,并且当我想要某种类型的照片时,必须在类别表上进行JOINS。

为此,我将不得不在Django中使用通用外键。那是好习惯吗?我的设计是不是很好?我被告知通用外键不是一个好主意......为什么?

谢谢!

编辑:我不会将图像本身存储在表格中,只是存储在AWS S3 Bucket中的路径!

1 个答案:

答案 0 :(得分:1)

您确定要将图像存储在数据库中吗?在许多情况下,通过将图像存储在文件系统而不是数据库中,您可以获得更高的效率。

将图像存储在db

之外

当您将图像存储在文件系统上时,您可以直接从您的网络服务器或云主机(如Amazon S3或内容分发网络或memcached等)提供这些图像。

元数据

在您自己的数据库中,存储的好信息(IMHO)是关于图像的元数据,例如可搜索的文件名(如果您的用户将以这种方式搜索),像素尺寸(如果您想按尺寸搜索或提供图像) HTML中的高度和宽度),mime内容类型(如果这对你有用)等等。

对于不同类型图片的描述,它取决于您希望存储的每种类型的不同信息类型。

sti或多个表?

你的图像种类基本相同吗? [按种类,我的意思是公司,个人资料,机器等]如果是这样的话,我会使用一个表来表示所有这些(元数据,即带有枚举类型字段)。根据您的数据库,您可以使用字符串名称(例如“company”,“profile”等)或使用int常量(例如1表示公司,2表示配置文件等)来执行此操作.Django有两种方法可以继承。此模式名称是单表继承(STI)。我相信Django并不完全支持这一点,但是如果你搜索它,你将获得如何实现它的正确的球场。

您的图像种类是否有本质区别?如果您的图像种类有非常不同的数据类型,那么请使用单独的表格。

据我所知,使用一个索引表和单独表之间的速度差异应该是相似的,因为在这两种情况下,每个请求基本上都有一个查找来查找图像行的范围。你可以确定基准。

来自haystack的

课程

在你编写代码之前,先阅读Facebook如何实现这一目标 - 这是一个很好的概述。

http://www.facebook.com/note.php?note_id=76191543919