2016-02-17 39 views
0

我想從兩個不同的列和IDENTITY創建一個複雜的主鍵。例如:SQL複雜主鍵

我的表:

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

lat = 43 
lng = 567 

我想主鍵值會像下面這樣:

locationID = 43.567-1 

「-1」將增加,如果已經有一個locationID以「43.567」開頭。

有沒有可能?

+1

我認爲你應該重新考慮你的數據庫模式。如果'lat' /'long'確實是複合主鍵,爲什麼要使用'locationID'?爲什麼你想要有相同的緯度/經度的多個位置ID?它只是沒有任何意義。 lat/long不應該是'int',並且'locationID'如果你強制填充它,那麼它將不再是'identity'。 –

+0

感謝您的參考,但我在這裏寫的只是一個例子。該想法稍後將使用密鑰的組合方式以便以不同方式理解和使用它。 –

+1

在主要/候選鍵中編碼信息是一個壞主意。搜索重新[智能/智能鍵](http://stackoverflow.com/a/31397135/3404097)。 – philipxy

回答

0

您可以將值發出查詢,你可能有問題也只是使用複合鍵,在這裏你可以通過使用lat和lng來實現。複合鍵的美妙之處在於只有構成列中的一個值必須是唯一的。

0

您可以製作複合主鍵,但它仍然必須是唯一的。沒有意義的是你想要做什麼。您試圖通過向重複項添加任意值來強制非唯一值是唯一的,以便使其具有唯一性。

解決這個問題的正確方法是不要使用重複的緯度/經度組合,或者簡單地使用LocationID作爲主鍵。