我正在为翻译词典实现数据库,并且正在使用指示here的设计。
有没有办法更新翻译表中的条目?或者您是否还需要一个主键才能促进任何更新?理想情况下,不需要更新,但可以想象翻译可能不正确并需要更改。
您似乎可以删除错误的翻译并插入新的翻译。就我而言,我有一个服务器数据库和一个Android应用程序,它将所需的语言及相关的单词和翻译下拉到本地数据库中。在这种情况下,虽然删除服务器上的错误翻译可能很简单,但客户端如何知道,除非它被删除并重新填充整个翻译表?
是主键,然后是两个word_id列的UNIQUE约束最好的方法吗?
答案 0 :(得分:1)
您可以使用以下语句更新转换表中的条目:
update TRANSLATION_EN_DE
set ID_DE = 3
where ID_DE = 2 and
ID_EN = 1;
虽然每种语言都没有一张表。
为唯一语言添加新表,并将其主键添加到包含所有语言的单词表中。
然后您的翻译表将是“word_from”和“word_to”。
它将使您的设计和代码更加简单。
要将更改传播到客户端,您可能希望对所有表中新列中的所有更改进行版本设置,以考虑新单词/翻译,拼写更正,可能删除的单词/翻译,并拥有客户端记录它检索数据的版本号。
由于您可能有要传播的删除,因此您需要在表中使用“软删除”标志,否则表中将没有记录来保存版本号。
您可能还希望将包含这些版本号的表作为带有文本的唯一键来解释已发生的更改类型以及更改的时间戳。从所有其他表中删除时间戳列。
因此,当您进行一批新更改时,请创建新版本记录,进行所有必需的更改,然后在单个事务中提交所有更改。然后整个变更集对其他数据库用户可见,他们可以非常有效地检查它们是否是最新的,并只检索相关的变化。