关于单列或复合主键

时间:2018-02-19 10:27:14

标签: postgresql

拥有单列主键或使用复合主键是否更好?我有以下示例:

 create table emp(
 subsidiary_id  smallint   , 
 Employee_id    int        ,
 emp_name       varchar,
 constraint emp_pkey primary key ( subsidiary_id   , Employee_id     )

数据将是行

 subsidiary_id , employee_id
    1,                 1
    1,                 2
    1,                 3
    2,                 4 
    3,                 5
    2,                 6   

任何子公司的员工ID都不能相同,但在我的报告中使用where子句中的列as subsdiary_id = 1和employee_id = 1等等

所以想知道如何更好地在employee_id列上创建primary,或者两者哪个更好?

1 个答案:

答案 0 :(得分:1)

听起来像复合主键是适合您的解决方案:

CREATE TABLE emp (
   subsidiary_id  smallint  NOT NULL, 
   employee_id    int       NOT NULL,
   emp_name       text,
   CONSTRAINT emp_pkey PRIMARY KEY (subsidiary_id, employee_id)
);

为此约束创建的索引对于仅subsidiary_id条件中出现WHERE的查询也很有用。