关于sql server:为没有UNIQUE约束的列生成唯一的数字/值

Generate a unique number/value for a column that does not have UNIQUE constraint

我有这个实体(在数据库和实体框架中):

1
2
3
4
5
6
7
8
public class LanguageValue
{
    public int ID { get; set; }
    public long Key { get; set; } // bigint in database
    public int LanguageID { get; set; } // FK with a Language table in database
    public string Value { get; set; } // nvarchar(MAX) in database
    public bool Active { get; set; } // bit in database
}

我已经读过这篇文章,但我的问题有点不同:EF6:如何根据实体ID自动生成唯一编号

我的Key列没有唯一约束,因为可能有多个行具有相同的Key值。例如:

1
2
3
4
ID   Key   LanguageID    Value
---------------------------------------------------
1    1     1             Name in Language 1
2    1     2             Name in Language 2

我不能使用Mapping表来强制执行FK而不是Key,因为多个表使用同一个表(产品名称,类别名称,文章内容)。

现在每当我需要插入ProductCategory记录时,我需要插入相应的语言值。但是,我还没有找到一种生成其中唯一的密钥的方法,而且,如果一次处理两个插入,则需要是唯一的(例如,同时添加产品和类别) 。

我正在考虑Guid,如果这是我与RNG的安全赌注,还是有更好的方法/设计来实现它?


好吧,我认为我的问题来自糟糕的数据库设计。 我将LanguageValue表分成两个表,如下图所示,并实现了之前设计没有的2个专业人员:

enter image description here

  • 我现在可以使用IDENTITY安全地插入LanguageKey
  • 我现在可以使用FK for Product和Category的NameLanguageKey,这是不可能的,因为Key不是唯一的。