我在SQL Server 2016数据库中有三个表:事件、比赛、季节。Races表是事件表的PK和季节表的PK的复合主键。我希望将Events表主键的主键填零,这样它就是3位数。比赛所需的组合键将采用类似2018001的格式,其中2018年是seasonId,001是eventId。
为此,我还使用了EF6和数据库优先的方法。这首先是一个合理的计划吗?如果是这样,我如何设置Events表以使用适当的零填充自动递增?
发布于 2018-02-08 23:02:59
当使用非数据库优先方法时,这就是为什么需要sql guys ;)。
零填充似乎是一个随意的要求,虽然它看起来很酷,但在功能上会造成问题。通过谷歌查找邮政编码问题,了解类似挑战的更多信息。
我建议使用tableid int identity(1,1) not null作为代理键。填充是在返回结果的usp_中完成的。
发布于 2018-02-08 23:16:23
我建议使用三列: eventid、seasonID和DisplayId。这样,您就可以正确地联接用于查询的int字段,并使用计算字段来填充DisplayID的数字。注意,这会稍微减慢插入和更新的速度,但是考虑到表的性质,它可能不会被注意到。最好在insert时在数据库中填充一次,这样每次调用数据时都会浪费时间进行计算,所以这不属于表示层。
在SQl服务器中填充的方法是正确使用并一起复制,如下所示
right(replicate ('0',4)+ cast(event_id as Varchar(20)), 10)确保填充足够的空间来覆盖数据库在一年中所能想到的最大事件数。
然后与季节to相结合:
Cast(seasonId as varchar(4)) + right(replicate ('0',4)+ cast(event_id as Varchar(20)), 10)在创建计算字段的过程中执行此操作(并持久化计算字段,这样它就不必一直重新创建。
有关如何创建计算字段的信息,请参阅以下问题:
https://stackoverflow.com/questions/48688366
复制相似问题