【问题标题】:MySQL database design to store geospatial data with internationalization and history supportMySQL 数据库设计用于存储具有国际化和历史支持的地理空间数据
【发布时间】: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


【解决方案1】:

为什么不将 rev_ 字段添加到 points_text(我认为有错误 - 请参阅我的 cmets 问题)?

你需要区分两个概念:插入点和插入文本。两者都可以进行修订。有时两者可能同时发生。

如果您愿意,您可以将该修订数据移出到单独的表中,并从两个点表中引用它。当两者一起修改时,这将允许您共享相同的条目。

【讨论】:

  • 我想避免这种情况,因为在实际应用程序使用中,如果我想显示修改历史(如 MediaWiki),我将不得不显示点的历史树和另一个为字符串。我不知道这是否是最好的方法。
  • 在这种情况下,这听起来像是一个更高层次的问题——你需要思考什么是“改变”以及它是如何由用户做出的,它如何与其他语言中的其他定义相匹配,以及你将如何展示它。目前你没有一个明确的想法(据我所知)。它似乎比数据库问题更具概念性......
  • 这些点和它们的属性来自一个 OpenLayers 应用程序,该应用程序与一个 Restfull API 通信,这是我想要构建的数据库方案。这些点由几个几何坐标和各种属性(如名称、描述、类型等)组成……这些属性需要翻译。在通常的操作中,用户只能编辑点坐标或文本字段或两者兼而有之。我想我会试试你的建议。非常感谢;)
猜你喜欢
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 2021-09-19
  • 2013-05-13
  • 2015-02-09
  • 1970-01-01
相关资源
最近更新 更多