1

大问题 - 我有一个 10 位数长的学号,它来自三个不同的数据库表。例如,学生编号为 0012011234,对应的值为:

0012 = school id
01 = class id
1234 = student id 

有人可以告诉我如何将此数据库设置为自动递增并建立这些学生编号吗?现在我有三个不同的数据库表(学校、教室、学生),显然它们都需要是唯一的。我在 C# 中工作,并且很难弄清楚如何自动增加与学校相关的教室和学生。有什么帮助吗?

4

3 回答 3

3

您不能(也不应该)为此使用自动增量。这应该由添加学生的应用程序来完成。如果有多个应用程序可以添加学生,则将该逻辑放在应用程序可以共享的单独库(或 Web 服务)中。

这通常被称为“智能标识符”,而不是自动增量的设计目的。

要在应用程序中执行此操作,我只需在您添加新记录并为每个组(学校或班级)选择idas时查询每个表。max(id) + 1

于 2013-08-21T03:27:54.150 回答
3

我认为您的基本模型有缺陷。

学生可以参加不止一堂课,甚至可能不止一所学校。学校共享设施也很常见,因此一个班级可以有来自多个学校的学生。

您应该为学生、学校和班级运行单独的一系列 ID,然后添加两个关系表school_x_classstudent_x_class.

这应该涵盖所有可能发生的情况。

于 2013-08-21T03:45:32.843 回答
1

虽然这不是 D Stanley 说的好方法,但我会说你可以编写一个标量值函数,从这些表中获取最高值并组合形成你想要的值

CREATE FUNCTION GetNewID
(

)
RETURNS NVarChar(15)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @result NVarChar(15)

    DECLARE  @SchoolId int
            ,@ClassId int
            ,@StudentId int 

    SELECT TOP 1 @SchoolId=ID FROM SchoolTable
    SELECT TOP 1 @StudentId=ID FROM StudentTable
    SELECT TOP 1 @ClassId=ID FROM ClassTable

    SET @RESULT = CONVERT(NVARCHAR,(@SchoolId+1)) + CONVERT(NVARCHAR,(@ClassId+1)) + CONVERT(NVARCHAR,(@StudentId+1)) 
    -- Return the result of the function
    RETURN @result

然后使用这个函数dbo.GetNewID()获取最新的ID

于 2013-08-21T03:54:50.923 回答