【发布时间】:2011-06-30 14:04:19
【问题描述】:
我的外键有问题。这是我的数据库结构(简化):
表“语言”
LanguageID - primary key
LanguageName - string (for example 'English')
..
表“用户”
UserID - primary key
LanguageID - byte (FK to Languages.LanguageID)
..
表“本地化”
LocalizationID - / compound primary key
LanguageID - \ compound primary key (FK to Languages.LanguageID)
Data - string (for example 'My Program' in English)
表“用户本地化”
UserLocalizationID - primary key
UserID - which user (FK to Users.UserID)
..
some other useful columns -> this table cannot be removed **EDITED**
..
LocalizationID - what string (FK to Localization.?) <- oops, not really because
LanguageID is needed
for FK to 'Localization'
如何在“用户本地化”到“本地化”中进行 FK(或任何其他完整性检查)。这种配置有可能吗?还是不行,因此需要进行一些重组(真的吗?)?如果有怎么实现?
编辑:为了更清晰,稍微整理了一下。
【问题讨论】:
-
清理引用——你有表 A/B/C,但你有关于命名表(字符串、语言等)的 FK 的注释。
-
嗨,'string' 和 'language' 表不是这个场景中的表,它们是这个范围之外的 FK。我已经给他们添加了一个注释。忽略它们。
-
我的猜测是,您需要表 C 中的另一个字段(类型)和引用表 B 的(复合)主键的复合外键
(ID_B, Type)。 -
最好向我们展示表的名称,以便我们更好地理解结构以及是否需要进一步规范化。
-
嗯,有没有办法不存储重复信息。我真的不想在这个表中存储语言,它只是冗余数据。还有其他方法吗?这个链接表会很大,我尽量保持低。 TableA.Type 和 TableC.Type(建议)之间的同步也会很复杂。
标签: sql sql-server database-design foreign-keys