将字符与 id 字段组合在一起



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

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

由于我在同一张桌子上使用所有问题,我认为最好将ID号存储为INF-0001,GEN-0001,...等。在这种情况下,我应该使用字符串作为 MSSQL 中 ID 列的数据类型吗?或者,为了存储 Id 及其相关代码的最佳方法是什么?我也想使用 GUID,但我不确定这是否可能。提前谢谢。

我想最好为您的自定义名称创建单独的字段。因此,您的表将具有intId(主键)字段和CustomNamevarchar(100)nvarchar(100)类型(如果使用 unicode 字符)字段以及自定义名称。

如果您与其他人一起JOIN文件表,则最好将int用作Id。如果您想在此字段中搜索值并且速度很慢,只需创建INDEX.

您可以有一个常规问题 ID和一个类别,例如:

表:问题

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

表:类别

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

然后,在查询这些表时计算问题编号。 如果要在数据库发生更改时跟踪问题编号,则可以将计算出的数字存储在表中(例如:IT 相关问题的前缀从INF更改为IT)


现在您已经有了良好的架构,如何控制问题表上的类别顺序?看看这个:

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)并返回另一个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

相关内容

  • 没有找到相关文章

最新更新