Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 单表继承还是两表继承?_Sql_Database_Database Design_Sti - Fatal编程技术网

Sql 单表继承还是两表继承?

Sql 单表继承还是两表继承?,sql,database,database-design,sti,Sql,Database,Database Design,Sti,假设我有一个包含以下列的表(单词列表): 现在,假设我想对每个“单词”进行翻译。什么最好?有第二张桌子吗 word: integer (FK) translation: varchar contributor: integer (FK) lang: integer (FK) 还是都在同一张桌子上 word: varchar translation_for: integer (FK - to the same table) contributor: integer (FK) lang: inte

假设我有一个包含以下列的表(单词列表):

现在,假设我想对每个“单词”进行翻译。什么最好?有第二张桌子吗

word: integer (FK)
translation: varchar
contributor: integer (FK)
lang: integer (FK)
还是都在同一张桌子上

word: varchar
translation_for: integer (FK - to the same table)
contributor: integer (FK)
lang: integer (FK)
假设有两种情况,(1)我需要拉一个翻译的单词和它翻译过来的原始单词,(2)我只需要拉一个翻译的单词。在这两种情况下,我都会更频繁地使用“原始”词语(包括选择和更新/插入)

那么,哪种方法最适合于每种场景,或者总体而言?我倾向于第一种方法,因为这样我的“默认”选择就不必由lang列限定。你觉得怎么样

谢谢

既然你似乎希望一个“单词”与一个“翻译的单词”有一个独立的身份,那么我认为第一个选项更能满足你的需要

通常,我认为设计更像:

PK (Key (varchar), Lang (FK)), Word (nvarchar)
更合适的做法是,只根据文本的键和Lang值引用文本。但是,看起来您是在用“原始单词”替换键,这使它略有不同。

既然您似乎希望“单词”具有与“翻译单词”不同的标识,那么我认为第一个选项更能满足您的需要

通常,我认为设计更像:

PK (Key (varchar), Lang (FK)), Word (nvarchar)

更合适的做法是,只根据文本的键和Lang值引用文本。但是,看起来您是在用“原始单词”替换Key,这使它略有不同。

如果您以后不规范数据库,如果您想添加一种语言,我想您以后会受到伤害。 有一个单词表,其中单词使用默认语言。它有一个ID。 有一个ID为(即西班牙语,2)的语言表和一个翻译表,该表包含单词ID、语言ID,最后是该语言中的实际单词。这是链接表

使用视图进行查询,但对于插入和更新,根据您的DBMS,您可能需要硬查询

这只是假设您正在尝试提供本地化,因此以后可能会添加更多语言。这样做比每次添加语言时都要修改数据库以添加列更容易。
如果您真的只需要一种翻译,并且非常怀疑您是否需要另一种翻译,那么只添加一列就可以了。

如果您以后想添加一种语言,如果您现在不规范化数据库,我想您以后会受到伤害。 有一个单词表,其中单词使用默认语言。它有一个ID。 有一个ID为(即西班牙语,2)的语言表和一个翻译表,该表包含单词ID、语言ID,最后是该语言中的实际单词。这是链接表

使用视图进行查询,但对于插入和更新,根据您的DBMS,您可能需要硬查询

这只是假设您正在尝试提供本地化,因此以后可能会添加更多语言。这样做比每次添加语言时都要修改数据库以添加列更容易。 如果你真的只需要一个翻译,并且非常怀疑你是否会需要另一个,那么只需添加一列就可以了