“嵌套”外键关系

时间:2019-03-21 14:40:17

标签: sql tsql relational-database

产品具有代码(和其他属性)。产品可在多个国家/地区使用,每个国家/地区都有不同的名称。包装产品是具有特定包装尺寸的产品。

发票明细行将包含package_code和country_code。 PackagedProduct的允许国家/地区受ProductCountry表的内容限制,即PackagedProduct仅在给定国家/地区可用的情况下才在该国家/地区提供。

这是我的方法(省略了Country和InvoiceDetail表):

create table Product (
    product_code varchar(15),
    strength varchar(10),
    -- other Product attributes
    constraint pk_Product primary key (product_code)
    );

create table ProductCountry (
    product_code varchar(15),
    country_code char(2),
    local_name varchar(100),
    constraint pk_ProductCountry primary key (product_code, country_code),
    foreign key (product_code) references Product(product_code),
    foreign key (country_code) references Country(country_code)
    );

create table PackagedProduct (
    package_code varchar(20),
    product_code varchar(15),
    pack_size int,
    constraint pk_PackagedProduct primary key (package_code),
    foreign key (product_code) references Product(product_code)
    );

我的问题是,这种设计不会将发票明细记录限制为PackagedProduct和Country的有效组合。

我们可以改进此设计吗?

0 个答案:

没有答案