在表格中混合复杂的主键

时间:2018-05-26 04:34:50

标签: sql-server

我有一个数据库项目作为我大学的完整学期作业,在我的一个表格中,可以使用以下格式的主键 001SALS201812101自动增量 实际上这个主键定义如下

001 - Branch Code
SALS - TRN Type
2018 - Current Year
122 - days of the year
101 - the auto increment number

任何人都可以告诉我如何制作这样的主键

1 个答案:

答案 0 :(得分:0)

这不是我建议在表格中做的事情。而是在依赖于表格的视图中。

  

让db执行它做得很好的事情,即标准自动递增integer作为主键。

如果您需要确保组合的唯一性,只需添加唯一索引/键(SQL Server / MySQL)。

下面是一个使用SQL Server的示例:

create table Sales (
    Id int identity primary key
    ,BranchCode int
    ,TRNType varchar(25)
    ,Year int
    ,DaysOfYear int
);

create unique index ux_sales_key on Sales (BranchCode, TRNType, Year, DaysOfYear);
go
  

请注意,截至2016年,SQL Server支持computed columns。这也可以解决您的问题以及表格本身。

现在MySQL中的表结构相同

create table Sales (
    Id int auto_increment primary key
    ,BranchCode int
    ,TRNType varchar(25)
    ,Year int
    ,DaysOfYear int
    ,unique key (BranchCode, TRNType, Year, DaysOfYear)
);

制定你的"复合键"使用类似于以下的视图:

create view vSales
as
    select
        concat(BranchCode, TRNType, Year, DaysOfYear, Id) as SomeCompositeKey
        -- the rest of your cols go here
    from
        Sales;
go