2016-02-05 113 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)   
);