我在业余时间修补了一个将 freebase rdf 模式转换为 django 模型的程序。应该使用这种方法对数据库进行合理的规范化。问题是,当我在运行 syncdb 后进行表计数时,它最终会得到超过 1000 个表,而这仅来自关于书籍、电影和密切相关的东西的模式。
最好使用数千个标准化表,还是应该尝试将信息转换为更少的表(见下文)?
下面是当前构建的 django 模型的一个小例子。
class Type_content_uploadedby(...):
f_content = BigForeignKey(...)
f_uploaded_by_rank = models.IntegerField(...)
f_content_rank = models.IntegerField(...)
f_uploaded_by = BigForeignKey(...)
class Meta():
unique_together = (("f_uploaded_by", "f_content"),)
app_label = 'db'
class Type_content(...):
object_fk = BigForeignKey(...)
f_length = models.BigIntegerField(...)
f_blob_id = models.CharField()
f_language = BigForeignKey(...)
f_uploaded_by = models.ManyToManyField(...)
f_media_type = BigForeignKey(...)
f_text_encoding = BigForeignKey(...)
class Meta():
app_label = 'db'
我可以尝试创建更少表的一种方法是将域、类型和属性的结构信息存储在一些表中,并将所有外键链接存储在一个巨大的边缘表中。所有数据类型(字符串、整数、数据...)都可以存储在一个表中,每个表都有一个属性外键和一个对象外键。这不会被规范化,所有的表,尤其是边缘表都会非常大。
最好的解决方案是什么,或者还有其他更好的解决方案吗?