【问题标题】:MS Access - Enforce Referential Integrity - Multiple Table Foreign Key ConstraintsMS Access - 强制参照完整性 - 多表外键约束
【发布时间】:2014-09-04 23:59:11
【问题描述】:

我在 MS Access 中创建了四个表来描述个人消防设备的允许配置,以用作资产登记的一部分。详情如下:

TBL_1   :  FIRE_CLASSIFICATION
FIELDS  :   | PK | CLASS              |
---------------------------------------
ENTRIES :   | 1  | Fire Blanket       |
            | 2  | Fire Extinguisher  |
            | 3  | Fire Hose Reel     |

TBL_2   :  FIRE_TYPE
FIELDS  :   | PK | TYPE               | FK_CLASS           |
------------------------------------------------------------
ENTRIES :   | 1  | General            | Fire Blanket       |
            | 2  | Carbon Dioxide     | Fire Extinguisher  |
            | 3  | Foam               | Fire Extinguisher  |
            | 4  | Powder ABE         | Fire Extinguisher  |
            | 5  | Powder BE          | Fire Extinguisher  |
            | 6  | Vap. Liquid        | Fire Extinguisher  |
            | 7  | Water              | Fire Extinguisher  |
            | 8  | Wet Chemical       | Fire Extinguisher  |
            | 9  | General            | Fire Hose Reel     |

TBL_3   :  FIRE_SPECIFIC
FIELDS  :   | PK | SPECIFIC           | FK_CLASS           |
------------------------------------------------------------
ENTRIES :   | 1  | Dimensions         | Fire Blanket       |
            | 2  | Capacity (kg)      | Fire Extinguisher  |
            | 3  | Length (m)         | Fire Hose Reel     |

TBL_4   :  FIRE_OPTIONS
FIELDS  :   | PK | FK_CLASS           | FK_TYPE        | FK_SPECIFIC    | OPTION |    
----------------------------------------------------------------------------------
ENTRIES :   | 1  | Fire Extinguisher  | Carbon Dioxide | Capacity (kg)  | 2.0    |
            | 2  | Fire Extinguisher  | Carbon Dioxide | Capacity (kg)  | 3.5    |
            | 3  | Fire Extinguisher  | Carbon Dioxide | Capacity (kg)  | 5.0    |
            | 4  | Fire Extinguisher  | Powder ABE     | Capacity (kg)  | 1.1    |
            | 5  | Fire Extinguisher  | Powder ABE     | Capacity (kg)  | 2.1    |
            | 6  | Fire Extinguisher  | Powder ABE     | Capacity (kg)  | 2.3    |
            | 7  | Fire Extinguisher  | Powder ABE     | Capacity (kg)  | 2.7    |
            | 8  | Fire Extinguisher  | Powder ABE     | Capacity (kg)  | 4.5    |
            | 9  | Fire Extinguisher  | Powder ABE     | Capacity (kg)  | 9.0    |
            | 10 | Fire Hose Reel     | General        | Length (m)     | 12.0   |
            ... CONTINUED

目前可以插入诸如

之类的条目
            | 11 | Fire Hose Reel     | Powder ABE     | Dimensions     | 1200 x 1200 |     

进入 FIRE_OPTIONS 表。这种行为是非常不可取的,因为该条目不 符合其他表中指定的声明(允许)组合。

我想了解如何在 FIRE_OPTIONS 表上实施合适的约束,以便在指定条目与其他三个表不一致时生成错误。

我曾尝试使用“数据库工具”-“关系”功能,但无法同时在 TBL_4 与 TBL_1、TBL_2 和 TBL_3 之间“强制参照完整性”。

我将非常感谢任何有关此问题的帮助。

** 编辑

我能够通过修改主键定义来解决这个问题。具体如下:

TBL_1 : FIRE_CLASSIFICATION
        PK: PK (Auto Increment)

TBL_2 : FIRE_TYPE
        PK: PK (Auto Increment) & FK_CLASS

TBL_3 : FIRE_SPECIFIC
        PK: PK (Auto Increment) & FK_CLASS

TBL_4 : FIRE_OPTIONS
        PK: PK (Auto Increment)

然后我在“数据库工具”-“关系”功能中定义了以下关系:

[ERI]    FIRE_CLASSIFICATION.PK (1)  ->  FIRE_TYPE.FK_CLASS (MANY)
[ERI]    FIRE_CLASSIFICATION.PK (1)  ->  FIRE_SPECIFIC.FK_CLASS (MANY)
[ERI] {  FIRE_CLASSIFICATION.PK (1)  ->  FIRE_OPTIONS.FK_CLASS (MANY)
         FIRE_TYPE.PK (1)            ->  FIRE_OPTIONS.FK_TYPE (MANY)
         FIRE_TYPE.FK_CLASS (1)      ->  FIRE_OPTIONS.FK_CLASS (MANY)
         FIRE_SPECIFIC.PK (1)        ->  FIRE_OPTIONS.FK_SPECIFIC (MANY)
         FIRE_SPECIFIC.FK_CLASS (1)  ->  FIRE_OPTIONS.FK_CLASS (MANY)    }

ERI : "Enforce Referential Integrity" Option Selected

【问题讨论】:

    标签: ms-access referential-integrity


    【解决方案1】:

    目前,由于 FIRE_CLASSIFICATION 和 FIRE_SPECIFIC 表之间存在一对一的关系,您可以将 SPECIFIC 列添加到 FIRE_CLASSIFICATION 表中。 如果事情变得更复杂,这可能不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-13
      • 2021-06-04
      • 2011-03-13
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多