组合SQL表主键的字段?

时间:2018-03-27 23:45:21

标签: sql entity-framework

是否可以使用两个字段(例如ZIPCode& Route)来创建主键?

public class RouteInfo
{
    [Key]
    public int ZIPCode { get; set; }
    public string Route { get; set; }
    public int BusinessCount { get; set; }
    public int ApartmentCount { get; set; }
    public int POBoxCount { get; set; }
    public int ResidentialCount { get; set; }    
}

zipcode有1:很多关系:路由。因此,当客户输入邮政编码时,他会获回该邮政编码中的路线列表,例如:

B001
B002
B003
...
C001
C002
C005

这些可以与zipcode结合生成主键吗?例如:

21001B001
21001B002
21001B003
...
21001C001
21001C002
21001C005

1 个答案:

答案 0 :(得分:0)

您可以将带有zipcode和路由的复合主键用作单独的值,但将它们存储在一起时会变得棘手。我不太了解您需要使用的有效邮政编码和路线,但您可能(或不会)获得2个(或更多)不同的邮政编码组合以及相同结果代码的路线

例如:

  • 使用路线21001拉<{1}}。
  • 使用路线B001拉<{1}}。

我会尝试单独存储它们,或者甚至更好地使用代理(自动增量)数值作为主键。这可以解决未来的问题,例如当路线改变它的代码时会发生什么?突然路线B001更新了,它现在是G023。您需要更新它的主键值以及与之相关的所有外键。邮政编码也会发生同样的情况。邮政编码也可能在不同国家(如以色列和美国)重复使用。