产品具有代码(和其他属性)。产品可在多个国家/地区使用,每个国家/地区都有不同的名称。包装产品是具有特定包装尺寸的产品。
发票明细行将包含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的有效组合。
我们可以改进此设计吗?