【问题标题】:Auto Generate Unique ID separate from Primary Key自动生成与主键分开的唯一 ID
【发布时间】:2017-11-25 22:57:22
【问题描述】:

我有一个关系数据库(我是新手),其中包含许多与棒球统计跟踪和分析相关的表。我目前正在处理的表格是tbl_PitchLog 表格,它跟踪击球时的投球。

我想要做的是消除对击球桌的需要,而只需将击球唯一 ID 用于一组投球。我有一个Pitch_ID 字段,但我希望SS 生成一个新的AtBat_ID,然后我可以参考它来获取特定击球手的所有音高。

举例

Pitch_ID | Pitch_Number | Result
1            1            Foul
2            2            Foul
3            3            Strike
4            1            Ball
5            2            Flyout
6            1            Groundout

成为:

Pitch_ID | AtBat_ID | Pitch_Number | Result
1           1            1            Foul
2           1            2            Foul
3           1            3            Strike
4           2            1            Ball
5           2            2            Flyout
6           3            1            Groundout

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    您没有指定您使用的 SS 版本,但 SQL Server 2012 引入了序列;您可以创建一个 at bat 序列,在 at bat 更改时获取下一个值,并将该值用于插入。

    CREATE SEQUENCE at_bat_seq
     AS INTEGER
     START WITH 1
     INCREMENT BY 1
     MINVALUE 1
     MAXVALUE <what you want the max to be>
     NO CYCLE; 
    
    DECLARE @at_bat int;
    SET @at_bat = NEXT VALUE FOR at_bat_seq; 
    

    大多数限定词是不言自明的; [NO] CYCLE 指定该值是否在达到最大值时从最小值重新开始。如上所述,当您达到最大值时会出现错误。如果您只是希望它在达到最大值时重新开始,请指定 CYCLE 而不是 NO CYCLE。

    【讨论】:

    • 天才!我正在使用 VS Pro 2015,所以我很确定它有 SS 2012
    • 如果我不希望它循环,我是否需要提供一个最大值
    【解决方案2】:

    使用Pitch_ID 作为主键创建tbl_PitchLog 表,同时它也是从主表中获取的外键。

    您要查找的是one to one relationship

    【讨论】:

    • Pitch_ID 已经是我的主键,但我正在寻找一种方法来生成 AtBat_ID 而不必创建冗余的 tbl_AtBat 表。每个 at-bat 的所有数据都已存储在此表中。虽然它也会被纳入游戏和赛季表中
    • 虽然这实际上是一对多的关系。我在表中也有一个 Game_ID 和 Season_ID ;)
    猜你喜欢
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 2017-08-25
    • 2016-02-06
    相关资源
    最近更新 更多