【发布时间】:2012-08-06 00:05:09
【问题描述】:
我正在开发用于存储地理空间数据的数据库架构,我需要支持点名称和描述等字符串的国际化,并支持记录所有修改。
这是我当前的架构:
points
---------------
rev_id (int autoincrement)
rev_from (date)
rev_to (date)
rev_operation (insert/update/delete)
rev_user (user who has made the modification)
point_id (int)
point_geom (geometry)
point_name_en
point_desc_en
point_name_fr
point_desc_fr
它工作正常,但我必须在每次添加新语言时更新设计,并且如果我更新一个翻译,我必须复制一整行......这会导致数据重复。所以为了避免我想把本地化的字符串放在另一个表中:
points
---------------
rev_id (int autoincrement)
rev_from (date)
rev_to (date)
rev_operation (insert/update/delete)
rev_user (user who has made the modification)
point_id (int)
point_geom (geometry)
points_text
---------------
point_id (int)
lang_code (en/fr/es/it etc...)
point_name
point_desc
它有效,但我无法跟踪翻译的修改。
设计一个数据库的最佳方式是什么,该数据库存储对象及其属性的翻译和属性修改的历史。
【问题讨论】:
-
为什么你不能在第二个例子中跟踪修改?
-
因为我必须在“points_text”数据库中添加修订字段,这会很复杂,在这种情况下我不知道如何检索特定修订的状态。例如:我更改了点名称的英文翻译,我在“points_text”表中添加了一行,但“points”表中的修订与“points_text”表中的修订没有关联。嗯,也许我需要再放一张桌子来做。
-
我认为您的 points_text 有误?它应该有 point_name 和 point_desc(它们将使用与 lang_code 对应的语言)。
-
是的,对不起,我正在更新这个;)
标签: mysql internationalization historical-db