2011-02-25 45 views
0

我有一個場景,其中有一個公寓,每個公寓都有我的桌子上被稱爲「物業」的單位。每個單位可以有多個電器,如AC,電視,冰箱等。我們正在維護一個電器主表。該場景的T-sql查詢將會是什麼?

說用戶已經購買了像電視,AC和CFL燈泡那樣的房子的一些項目。所以他會在第一次進行一個插入操作,在該操作中插入諸如ApplianceId,DateOfPurchase,產品序列號,PropertyId(單位ID)的詳細信息。直到此爲止,我們沒有問題。

現在我們的QA拋出了用戶輸入錯誤的序列號到電視機的情況。現在他想更新記錄。但是,在與來自下列條件:

  1. 該設備的序列號必須是唯一的,但在兩個不同的設備可能有相似的序列號,如果在我的公寓有4個家電外面我有兩個吊扇,冰箱和AC,那麼1個吊扇和AC的序列號可能相同,但是兩個吊扇序列號不能相同。

  2. 該檢查應對所有屬性進行。這在整個表格中應該是適用的。它不應該是財產。 這就是說,如果我有一個交流與串行#1234然後,這是不可能的,所以SO大師喬恩Skeet也可以有串行#1234 AC。他可以使用相同的序列號來添加Refridgrator。注意我們使用的是普通數字形式的序列號,如123456789901。不允許任何字符。

請幫助我,並告知是否有任何事情不清楚。

回答

2

你只需要一個唯一的約束或索引appliance type, serial number由事物的聲音。

create unique index uix on appliances(type, serial_number) 
3

對(Product,SerialNo)屬性表的唯一約束?是假設產品持有productType

這應該做的伎倆。

GJ

2

我要去假設ApplianceId是指設備的類型,即每種家電都有一個唯一的標識符。在這種情況下,組合ApplianceId串行#構成設備表的主鍵。設置將防止導致衝突的插入或更新。

+0

並將與ORMs更好地工作 – 2011-02-25 18:19:56

+0

@Mark我從來沒有好運氣設置一個主鍵與ORM多列。我會對這兩個字段設置一個唯一的約束,並放入一個代理主鍵。 – 2011-02-25 19:23:36

+0

嘿,我有相反的意見,至少在實體框架中。爲了防止重複,我必須自己動手跟蹤事情。 – 2011-02-25 20:16:55

1

同一產品的不同製造商可能是一個問題。除了類型和序列號之外,您還需要約束條件。