2014-01-16 73 views
3

我對我的java應用程序有點麻煩,要麼我不知道,要麼以簡單的方式這是不可能的。我希望這是第一個選項因爲我是初學者。基於兩列的重複密鑰

這是我的表:

CREATE TABLE IF NOT EXISTS `evolution` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`product` varchar(50) NOT NULL, 
`quantity` double NOT NULL, 
`date` date NOT NULL, 
`operator` varchar(50) NOT NULL, 
PRIMARY KEY (`id`) 
) 

我想通過自己的日期來跟蹤一些產品的銷售。

我想達成的目標是:讓我們說運營商進入的今天,17.01.2014產品banana與數量4。後來那一天,他將插入​​與數量10。當日他將插入banana與數量爲1和​​,數量爲12

,明天他將做同樣的,與數量2但日期18.01.2014。這應該是因爲它的同一個產品一個新的行,但在不同的日期插入bananas

在這種情況下,我需要我的數據庫執行以下操作: 檢查banana插在17.01.2014。如果沒有,用數量0+4插入。 如果香蕉已插入17.01.2014更新數量4+1

第二天會檢查是否在18.01.2014上插入了banana,如果沒有,則插入數量爲2,如果是,則更新數量。

所以:我不能有任何的專欄,因爲日期可以是相同的​​和banana和相同的日期,當然,數量。

我該如何做到這一點? 我想到了幾個辦法,但它是不是很有效:

  1. Select (product,date) from evolution where product=banana AND date=18.01.2014 如果返回任何東西的話,我會執行更新。 如果這不返回任何東西,然後我會執行一個插入。

  2. 製作一列product-date這將是唯一的。其中我會插入例如banana 17.01.2014。這會更容易,但我不喜歡這種方式,它的骯髒。

這一切都將是那麼容易,如果我可以做重複key.Try像一張雙人牀和插入banana and date。那麼,如果組合已經存在,做一個更新。

使其更短,更容易理解:

這是有效的:

+-------+----------+ 
|product|date  | 
+-------+----------+ 
|banana |17.01.2014| 
+-------+----------+ 
|banana |18.01.2014| 
+-------+----------+ 
|apples |17.01.2014| 
+-------+----------+ 
|apples |18.01.2014| 
+-------+----------+ 

這是無效的:

+-------+----------+ 
|product|date  | 
+-------+----------+ 
|banana |17.01.2014| 
+-------+----------+ 
|banana |17.01 2014| 
+-------+----------+ 
|banana |18.01.2014| 
+-------+----------+ 
|banana |18.01.2014| 
+-------+----------+ 

所以他們(productdate)可以有重複由他們自己但不在一起。

對不起,很長的文章...我希望我不會錯過任何簡單和乾淨的方式做到這一點,但我只是可能,我當然希望如此,我是一個初學者在編程。 謝謝,祝你有個美好的夜晚!

+1

在(產品,日期)上有一個唯一的密鑰!?!?! – Strawberry

+1

似乎你是在對產品和日期進行獨特約束之後。可以在事實之後添加它,或者使其成爲create table語句的一部分。這樣做後,會看起來像這樣:'ALTER TABLE evolution ADD CONSTRAINT uc_product UNIQUE(product,date)' – Durandal

回答

2

聽起來像你想在產品和日期的複合關鍵。

PRIMARY KEY (product, date) 

複合主鍵是主要的方式使用不止一個鍵來確定事物的獨特性。舉例來說,如果你有一個商店,出售只有錘子,並且都是藍色或紅色,你不能找出那些在DB錘或藍色的指甲,你不得不同時使用

tool | color | quantity 
hammer blue  4 
hammer red  3 
nail  blue  1 
nail  red  6 

您這裏的PK將在工具和顏色上。

+0

不知道,關於複合鍵,我將不得不研究並回到這裏:D –

+4

它會是ID和日期或產品和日期? – Durandal

+2

@MagicMan好抓。產品。我沒有仔細閱讀這個問題,看不到香蕉!= id。認爲是因爲他將他的PK標記爲香蕉是id。謝謝btw – Brad