2016-04-25 20 views
0

私は3つのテーブルを持つデータベースを持っています。 item、item_unit、およびunitsを指定します。アイテムは7つのユニットのうちの1つに属します。これらのテーブルの作成は、次のとおりです。SQL Server 2012:where句を使用してレコードの重複を防ぐ方法

CREATE TABLE items 
( 
itemID int PRIMARY KEY, 
itemDefinition varchar (150) 
) 

CREATE TABLE units 
(
unitID int PRIMARY KEY, 
unitName varchar(25) 
) 

CREATE item_Units 
(
itemID int FOREIGN KEY REFERENCES items(itemID), 
unitID int FOREIGN KEY REFERENCES units(unitID), 
PRIMARY KEY(itemID, unitID) 
) 

シナリオがあり、同じユニットに属しているアイテムは、同じ定義を持つことはできません。重複を制限するためにテーブルにインデックスと制約を作成することは可能ですが、このシナリオに関連してこれを行うことは可能ですか?

+0

アイテム定義をアイテムテーブルのレベルで保存できませんでした。そのユニークな定義は、「Items」と「Units」の関係に基づいています。それは2つを関連付けるテーブルに格納しなければならず、ユニークなキーの一部になります。あなたは2つのテーブルを持つこともできます。 'Items'は' Units 'に外部キーを持たなければならず、リンクテーブルは不要です。それがうまくいくはずです。 – BenM

答えて

0

あなたのシナリオによると、スキーマは次のようになります。

CREATE TABLE items 
( 
itemID int PRIMARY KEY, 
itemDefinition varchar (150) not null 
) 

CREATE TABLE units 
(
unitID int PRIMARY KEY, 
unitName varchar(25) not null 
) 

CREATE TABLE item_Units 
(
itemID int FOREIGN KEY REFERENCES items(itemID), 
unitID int FOREIGN KEY REFERENCES units(unitID), 
itemUnitDescription varchar(200) null, 
PRIMARY KEY(itemID, unitID) 
) 
create view items_with_units 
as 
select i.itemId,u.unitID, 
isnull(ui.itemUnitDescription,isnull(i.itemDescription,'')+ ' '+isnull(u.unitName,'')) Description 
from items i 
left join item_units ui on i.itemID=ui.itemID 
left join units u on u.unitID=ui.unitID 

こうselect * from item_with_unitsを何をしたいあなたを与えるだろう。

関連する問題