将字符与 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
.
我将在 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
.