将字符与 Id 字段组合

Combining Characters with Id Field

我将在 MVC5 应用程序中创建一个问题 table,我想为每种类型的问题使用特殊代码,如下所示:

对于与 IT 相关的问题 INF-0001、INF-0002、... 对于一般类型的问题 GEN-0001、GEN-0002、...

因为我在同一个 table 上使用所有问题,我认为最好将 ID 号存储为 INF-0001、GEN-0001 等。在那种情况下我应该使用字符串作为MSSQL中ID列的数据类型?或者用相关代码存储 Id 的最佳方法是什么?我也考虑过使用 GUID,但我不确定是否可行。提前致谢。

您可以有一个一般问题 ID 一个类别,例如:

Table:问题

------------------------------------
IssueID | CategoryID | CategoryIndex
------------------------------------
   1    |     1      |      1
   2    |     1      |      2
   3    |     2      |      1
   4    |     1      |      3

Table:类别

-----------------------------
CategoryID | Prefix | Name
-----------------------------
     1     |   INF  | IT 
     2     |   GEN  | General

然后你在查询这些table的时候计算期号。 如果您想在数据库发生变化时跟踪问题编号(例如:IT 相关问题的前缀从 INF 更改为 IT)


现在您有了一个好的架构,您如何控制问题的类别顺序 table?检查一下:

DECLARE @categoryID INT
DECLARE @nextSequence INT

SET @categoryID = 1 --You'll have to change this!

SELECT @nextSequence = i.CategoryIndex
FROM Issue i
WHERE i.CategoryID = @categoryID

SELECT COALESCE(@nextSequence, 0) + 1 as 'NextSequence'

您可以将其转换为一个存储过程(NextSequence,也许吧?)接收一个 INT 作为参数(类别 ID)和 returns 另一个 INT结果(新问题的 CategoryIndex)。

最后,创建您的完整代码:

SELECT
    i.IssueID
    , c.Prefix + '-' + RIGHT('0000' + CONVERT(VARCHAR(4), i.CategoryIndex), 4) as 'IssueCode'
FROM Issue i
INNER JOIN Category c ON i.CategoryID = c.CategoryID

我想最好为您的自定义名称创建单独的字段。所以你的 table 将有 int Id (主键)字段和 CustomName varchar(100)nvarchar(100) 类型(如果你使用 unicode 字符)字段使用您的自定义名称。

如果您 JOIN 您的文件 table 与其他人一起使用 int 作为 Id 性能会更好。如果您想在此字段中搜索值并且速度很慢,只需创建 INDEX.