2013-03-14 50 views
0

我知道這是第一個問題,但有人問我,但我無法給他適當的答案。 存在具有多對多關係保存在employee_technology_rel .Employee表有兩個表Employee,Technology fields- emp_id (auto_increment)emp_name(varchar)DOB (date)哪裏有科技領域tech_id(auto_increment)tech_name(varchar) 這兩個表可以names.which唯一約束的重複,我應該定義允許獨特條目?如何爲員工表中的記錄分配唯一標識符?

+1

你想讓這個名字獨一無二嗎?或者你想唯一標識一個記錄?爲唯一標識一行你已經有自動增量的ID字段 – Habib 2013-03-14 12:49:16

+0

爲唯一記錄,我有'emp_id'這是'auto_increment',我不想讓現有員工插入 – user2067120 2013-03-14 12:51:58

回答

0

您可以定義表employee_technology_rel唯一項目,

ALTER TABLE employee_technology_rel 
     ADD CONSTRAINT emptech_pk PRIMARY KEY (emp_id, tech_id) 
// or if you have set a primary key already, you can still define via UNIQUE 
ALTER TABLE employee_technology_rel 
     ADD CONSTRAINT emptech_uq UNIQUE (emp_id, tech_id) 

它的作用是隻允許獨特的技術爲每一位員工

爲了讓您在表Employee有獨特的emp_name以及獨特tech_name上表Technology,你也可以通過添加唯一約束

ALTER TABLE Employee ADD CONSTRAINT emp_uq UNIQUE (emp_name) 
ALTER TABLE Technology ADD CONSTRAINT tech_uq UNIQUE (tech_name) 
+0

但在添加新員工時,我是不分配任何技術給他,我插入只插入員工的詳細信息。我應該爲員工詳細信息的唯一性定義任何專欄嗎? – user2067120 2013-03-14 12:59:18

+0

否 - 這就是emp_id列的內容。 employee_technology_rel中某行的*缺失將意味着該員工沒有分配技術。員工表和技術表都不依賴於employee_technology_rel表;相反,該表依賴於其他兩個,但僅限於員工被分配技術。 – 2013-03-14 13:17:39

0

你想在定義一個複合主鍵更改表employee_technology_rel中的兩列:emp_id和tech_id。

0

唯一索引和唯一約束是相同的。他們實現了相同的目標 。 SQL性能對於兩者都是相同的。

添加唯一約束 ALTER TABLE dbo。添加約束 唯一聚集()ON [PRIMARY]

添加唯一索引 CREATE UNIQUE聚集索引 ON DBO。 ()ON [PRIMARY]

sqlauthority.com和從谷歌搜索msdn: 「SQL server unique index」。