【问题标题】:Dictionary table relationships (MS SQL 2005)字典表关系 (MS SQL 2005)
【发布时间】:2009-06-30 09:47:23
【问题描述】:

我有一个名为 'Dictionary' 的表,其列如下:

  • ID 大整数
  • 类型 varchar (200)
  • ITEM varchar (200)

表被各种表用作简单的字典/查找。
例如,它存储国家、标题、业务类型列表。

TYPE 列保存关于字典类型的信息,ITEM 是字典字符串值。

一切正常,但我在建立字典和外来表之间的关系时遇到问题。
当我使用“外键关系”时,我不能让它依赖于“类型”列。

(请注意相同类型的相同项目 - 例如“国家”可以链接到多个表,而其他类型的项目可以链接到不同的表)

目前我正在使用 USP 来管理它,但我想切换到标准关系机制。
任何建议如何获得?

【问题讨论】:

  • 所描述的列有哪些列类型?
  • 按要求添加的类型

标签: sql sql-server sql-server-2005 foreign-key-relationship relationship


【解决方案1】:

在我看来,您可以考虑另一种设计

Dictionary table
ID (pk)
DICTIONARY_TYPE_ID (fk to dictionaryType) 
ITEM

DictionaryType table
ID (pk)
DESCRIPTION

然后在您当前想要引用原始设计中的 Type 字段的位置创建指向 DictionaryType 表的 ID 的链接

【讨论】:

    【解决方案2】:

    从问题的上下文来看,我猜你需要做以下两件事之一:

    • Type 列设为主键
    • 或让外键依赖于此处的ID 字段。

    外键需要引用主键,看起来你的Type 列不是PK。

    【讨论】:

    • 我认为这不是一个好的答案。是的,FK 指的是主键,但我们通常在您所指的表中找到该 PK(在本例中为表 'TYPES' 或带有 PK 列 'TypeID' 的东西)
    • 如果这个表不是关系的 PK 端,你是对的(这就是问题的意思;“在字典和外国表之间”表明 FK 是在第三个表上定义的) .
    【解决方案3】:

    您在这里拥有的是一种 EAV 数据库设计,由于多种原因,其中一个是您的问题。没有真正意义上的解决方案。您可以尝试使用 sql_variant 作为项目的列类型,并尝试在其上建立 PK-FK 关系。

    还有另一种方法可以尝试使用 xml 数据类型和模式来执行此操作,例如我描述的 here。但是您必须对此进行测试,看看它是否适用于您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多