2016-02-05 164 views
-1

我的要求是具有可没有类似的厂商,产品和版本,同时产品的表。SQL。唯一和主键

但是,我也希望可以通过主键上的另一个表引用此表,对于不同的供应商,产品版本我用unique

create table Products 
    (
    vendor varchar(100), 
    product varchar(100), 
    version varchar(30), 
    unique (vendor, product, version, cve)   
); 

但这种方式我不能用它product_id引用它,因为我想在另一个表:

create table Product_cve(

    product_id int, 
    cve varchar(14), 
    foreign key (product_id) references Products(product_id), 
    foreign key (cve) references VulnerabilitiesCVE(cve) 
); 

,还有一件事我可以做的是,

create table Products 
    (
    product_id int NOT NULL AUTO_INCREMENT, 
    vendor varchar(100), 
    product varchar(100), 
    version varchar(30), 
    primary key (product_id) 

    ); 

这样,我将结束有重复的产品......

+0

您应该在'Products'表中最好维护'product_id'和'product_name',并创建另一个具有'product'和'vendor',称为'product_vendor'的映射表。然后,你可以使用'product_vendor_id'(product_vendor'表'PK)为'Product_cve'表的外键。 –

回答

0

解决办法很简单:

create table Products 
    (
    product_id int AUTO_INCREMENT 
    vendor varchar(100), 
    product varchar(100), 
    version varchar(30), 
    UNIQUE(vendor, product, version, cve), 
    PRIMARY KEY (product_id)   
);