我們現在正在使用Django開發一個多語言網站。我們網站上的內容有不同的語言版本。例如,對於一篇文章,我們有英文和西班牙文版本。 目前我們使用這個模型:哪個模型設計更好?
class Post(models.Model):
user
title
detail
count_follower
...
orginal_language
date
class PostEspanish(models.Model):
post = models.ForeignKey(Post)
title
detail
因此我們使用郵政所接受的英語內容和PostEspanish西班牙內容。 如果有人用英文寫一篇文章,我們只是把它放在Post模型中,我們把翻譯後的文章放在PostEspanish模型中。如果有人用西班牙文寫一篇文章,我們首先創建一個Post實例,然後創建一個PostEspanish實例並將內容放入PostEspanish中,如果有人翻譯這篇西班牙文文章,我們會將翻譯後的文章放入其引用的Post中。
在不同的模型上存儲不同的語言內容是因爲搜索的人想這樣。他說這對搜索很有好處。
使其更清晰,例如,一些用戶書寫文章中,我們將做到以下幾點:
if language == 'English':
post = Post.objects.create(..., orginal_language='english')
else:
post = Post.objects.create(..., original_language='espanish')
PostEspanish.objects.create(post=post, ...)
和翻譯:
post = Post.objects.get(id=id)
if post.orginal_language == 'english':
post = post.postespanish
#update post
post.save()
else:
#update post
post.save()
今天,有人說這種模式的設計是真窮。他說目前的模型不是很好的面向對象。這裏是他們做的方式:
class Post(models.Model):
user
count_follower
...
orginal_language
date
class PostContentEnglish(models.Model):
post = models.ForeignKey(Post)
title
detail
class PostContentEspanish(models.Model):
post = models.ForeignKey(Post)
title
detail
因此,代碼將是這樣的:
if language == 'English':
post = Post.objects.create(..., orginal_language='english')
PostContentEnglish.objects.create(post=post,...)
else:
post = Post.objects.create(..., orginal_language='espanish')
PostContentEspanish.objects.create(post=post,...)
但我們大多數人認爲有這兩種方法之間沒有什麼區別。而他的模型設計將會生成一張非常糟糕的表格。
那你認爲哪一個更好?
在不同的模型上存儲不同的語言內容是因爲搜索的人想這樣。他說這對搜索很有好處。 – thoslin 2011-06-11 03:41:30
如果他說有帽子有英文桌和西班牙語桌有助於表演,他是錯的。使用單個表格爲列中的內容指示語言。 – 2011-06-11 03:44:08