SQL复杂主键

时间:2016-02-17 16:15:15

标签: sql database-design primary-key composite-primary-key

我想创建一个复杂的主键,它来自两个不同的列,也是IDENTITY。例如:

我的表:

angular.module('demo')
.directive('directiveName', function() {
    ...
});

我希望主键值如下所示:

create table Location (
     locationID int primary key,
     lat int not null,
     lng int not null,
)

lat = 43
lng = 567

如果已经有一个以“43.567”开头的locationID,则会添加“-1”。

有可能吗?

3 个答案:

答案 0 :(得分:0)

我自己没有测试,但可以使用触发器

http://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html

但是,如果尝试在没有主键值的情况下发出查询,则可能会出现问题

答案 1 :(得分:0)

你也可以使用复合键,这里你可以使用lat和lng。复合键的优点在于,只有一个构成列的值必须是唯一的。

答案 2 :(得分:0)

您可以制作复合主键,但它仍然必须是唯一的。你要做的事没有意义。您试图通过向重复项添加任意值来强制非唯一值是唯一的,以使其成为唯一。

解决这个问题的正确方法是不要使用重复的lat / lng组合,或者只使用LocationID作为主键。