資料庫復合主鍵
⑴ 復合主鍵資料庫怎樣寫
通過sql語句執行建立。又分兩種,一是在建表語句中直接寫,二是建表之後更改表結構。
在建表語句中直接寫:
Create Table 表名 (欄位名1 Int Not Null,
欄位名2 nvarchar(13) Not Null Primary Key (欄位名1, 欄位名2),
欄位名3…………
欄位名N………… )
建表之後更改表結構:
CREATE TABLE 表名 (欄位名1 Int Not Null,
欄位名2 nvarchar(13) Not Null
欄位名3…………
欄位名N…………)
GO
ALTER TABLE 表名 WITH NOCHECK ADD
CONSTRAINT [PK_表名] PRIMARY KEY NONCLUSTERED
(
[欄位名1],
[欄位名2]
)
GO
⑵ 如何在sqlserver資料庫表中建立復合主鍵
方法一:創建表之後,alter table table_name add primary key(欄位1,欄位2)
方法二:CREATE TABLE 表名 (欄位名1 Int Not Null, 欄位名2 nvarchar(13) Not Null 欄位名3………… 欄位名N…………) GO ALTER TABLE 表名 WITH NOCHECK ADD CONSTRAINT [PK_表名] PRIMARY KEY NONCLUSTERED ( [欄位名1], [欄位名2] ) GO
方法三:建表後,右鍵-->設計,選中作為符合主鍵的列,選中之後右擊-->設為主鍵
⑶ 資料庫中什麼是復合鍵啊
就是多個欄位作為主鍵
復合鍵最明顯的優點是可以減少資料庫表的數量。
然而,復合鍵的缺點卻也是很明顯的:
1.使得表與表之間的相互依賴性程度加深;
2.會出現更為復雜的約束、規則;
3.對用戶更新數據的限制大大提高;
4.這樣的資料庫表設計,使得規范化程度最低(只能達到1NF),所以存在嚴重的數據冗餘和更新異常問題等。
當然,可能還有很多... ...
總之,我認為對於復合鍵來說,其缺點大於優點,故此,資料庫設計規范中都建議避免使用復合鍵!
僅為一孔之見,供參考!
⑷ 怎麼設置兩個主鍵在ACCESS資料庫表中
創建復合主鍵
可以指定多個欄位的組合用作表的主鍵,但是現在很
少這樣做。這種主鍵通常稱為復合主鍵。如圖2-23 所示,
選擇要在復合主鍵中包括的多個欄位,然後單擊" 工具"
功能區選項卡中的鑰匙圖標。當然,如果在表設計中這些
欄位排列在一起會更有助於快速操作。
開發人員強烈感覺到主鍵應該由資料庫中原本出現的
數據所組成時,這時才會使用復合主鍵。過去曾告訴所有
開發人員,每個表都應該有一個原本天生的主鍵。
現在很少使用復合主鍵的原因是: 開發人員已經認識到數據是很難預測的。即使用戶承諾某
些欄位的組合在表中決不會出現重復,但實際情況會與計劃偏離。使用替代的主鍵〈如"自動編
號" ) 將袤的設計與表的數據分開。最後,使用原本天生的主鍵(也就是表中原本出現的數據〉的
問題在於數據集足夠大時,選擇作為表的主鍵的欄位值很可能出現重復。
另外,使用復合主鍵時,維護表間的關系也變得越來越復雜,因為必須在包含相關數據的所
有表中復制欄位。使用復合主鍵只會增加資料庫的復雜性,而不會提高資料庫的穩定性、完整性
或其他所需的特性。
⑸ SQL裡面怎麼設置復合主鍵
CREATE TABLE [UserRole] (
a INT NOT NULL,
b INT NOT NULL, c INT NOT NULL,
PRIMARY KEY(a,b)
) ;
這是在查詢分析器里運行的。
如果手工建表的話,只需按住Ctrl鍵同時選擇兩個欄位就可以設置復合主鍵了。
⑹ 關於資料庫復合主鍵問題
如果項目比較小,鑒於userid的全局唯一性,是可以做主鍵的,但對於大型項目,由於表關系復雜,用有意義的具有可變性的欄位作為主鍵是不合適的,建議使用無意義的id列作為主鍵,希望我的回答對你有所幫助,如果可以,不妨實踐一下,會有你自己的體會。
⑺ 如何在資料庫表中建立復合主鍵(即多個欄位同時作為
(即多個欄位同時作為主鍵)主鍵是資料庫表的一個重要屬性,建立主鍵可以避免表中存在完全相同的記錄,也就是說主鍵在一張表中的記錄值是唯一的。
建立主鍵有兩種方法:一種是在資料庫提供的GUI環境中建立,另一種是通過SQL語句執行建立,下面分別介紹。
1.在資料庫提供的GUI環境中建立(以SQL7為例)。
輸入表信息後按Ctrl鍵同時選中多行,然後點上面的主鍵按鈕就行了。
2.通過SQL語句執行建立。又分兩種,一是在建表語句中直接寫,二是建表之後更改表結構。
在建表語句中直接寫:
Create Table 表名 (欄位名1 Int Not Null,
欄位名2 nvarchar(13) Not Null Primary Key (欄位名1, 欄位名2),
欄位名3…………
欄位名N………… )
建表之後更改表結構:
CREATE TABLE 表名 (欄位名1 Int Not Null,
欄位名2 nvarchar(13) Not Null
欄位名3…………
欄位名N…………)
GO
ALTER TABLE 表名 WITH NOCHECK ADD
CONSTRAINT [PK_表名] PRIMARY KEY NONCLUSTERED
(
[欄位名1],
[欄位名2]
)
GO
例:
CREATE TABLE Student
(Son CHAR(12) PRIMARY KEY,
CREATE TABLE Course
(Con CHAR(4),
PRIMARY KEY (Con),
);
CREATE TABLE SC
(Sno CHAR(12),
Con CHAR(4),
PRIMARY KEY(Sno,Con),
FOREIGN KEY(Sno)REFERENCES Student(Sno),
FOREIGN KEY(Cno)REFERENCES Course(Cno));
⑻ 如何在資料庫中定義復合主鍵急!!!
一般不定義復合主鍵
⑼ 資料庫中復合主鍵如何查詢,sql 語句如何寫
zwb12340 說的就是錯的
首先來說一下你的這兩種寫法
1.這一個比較快,其實這是把兩個SQL 拼接成1個SQL,但是在拼接的時候使用了UNION ,這個過程會排序去重復,這一點上會影響性能。可以把UNION 改成UNION ALL,UNION ALL不會排序去重,可能效率會更好一點
2.這一個不會太快,因為使用in的話,默認是不使用索引的,那麼這一個過程會全表掃描,那麼就很慢了(我這里說的索引是默認的B+樹索引,是自動屏蔽的,如果是BITMAP索引的話,是會使用的),
對於你這個問題的解決,我給以下幾個意見
1.首先把UNION改成UNION ALL試一試,看效率怎麼樣
2.檢查是否在proct上有沒有索引,盡量建一個索引
3.如果以上兩個改進之後,還沒效果的話,可以在這個表上,基於proct建立分區表,使用分區表的話,那麼效果會比較明顯