2016-02-05 3 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

Вы должны идеально поддерживать только «product_id» и «product_name» в таблице «Продукты» и создавать другую таблицу сопоставления, которая имеет «продукт» и «поставщик», например 'product_vendor'. Затем вы можете использовать 'product_vendor_id' (PK таблицы' product_vendor') как внешний ключ в таблице '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)   
); 
Смежные вопросы