sql,如何用sql語句對一個已經編輯好的表在設置主碼和外碼?
比如這個:create table Coursern (Cno char(4),rn Cname char(40),rn Cpno char(4),rn Ccredit smallintrn );rn如何用sql語句將其中的兩個列設置為主碼和外碼?并設置Ccredit的屬性的取值范圍為0到10?sql中的主碼和外碼,屬于索引,SQL索引有兩種,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系統的性能,加快數據的查詢速度與減少系統的響應時間
創建索引的語法:
CREATE [UNIQUE][CLUSTERED | NONCLUSTERED] INDEX index_name
ON {table_name | view_name} [WITH [index_property [,....n]]
說明:
UNIQUE: 建立唯一索引。
CLUSTERED: 建立聚集索引。
NONCLUSTERED: 建立非聚集索引。
Index_property: 索引屬性。
UNIQUE索引既可以采用聚集索引結構,也可以采用非聚集索引的結構,如果不指明采用的索引結構,則SQL Server系統默認為采用非聚集索引結構。
刪除索引語法:
DROP INDEX table_name.index_name[,table_name.index_name]
說明:table_name: 索引所在的表名稱。
index_name : 要刪除的索引名稱。
修改索引的語法:
ALTER INDEX命令在其用來做什么方面多少有些欺騙性。截止到現在,ALTER命令總是與修改對象的定義有關。例如ALTER表以添加或禁用約束和列。ALTER INDEX是不同的-該命令與維護有關,而與結構完全不相干。如果需修改索引的組成,那么只能DROP然后CREATE索引,或者用DROP_EXISTING=ON選項CREATE并使用索引。
ALTER INDEX {<name of index> | ALL}
ON<table or view name>
{ REBUILD
[[ WITH (
[PAD_INDEX = {ON | OFF}]
| [[,] FILLFACTOR = <fillfactor>
| [[,] SORT_IN_TEMPDB = { ON | OFF }]
| [[,] IGNORE_DUP_KEY = { ON | OFF }]
| [[,] STATISTICS_NORECOMPUTE = { ON | OFF }]
| [[,] ONLINE = { ON| OFF }]
| [[,] ALLOW_ROW_LOCKS = { ON | OFF }]
| [[,] ALLOW_PAGE_LOCKS = { ON | OFF }]
| [[,] MAXDOP = <max degree of parallelism>
)]
|[ PARTITION = <partition number>
[ WITH (< partition rebuild index option>
[,...N])]]]
| DISABLE
| REORGANIZE
[ PARTITION = <partition number> ]
[ WITH (LOB_COMPACTION = { ON | OFF })]
| SET ([ ALLOW_ROW_LOCKS = { ON | OFF} ]
| [[,] ALLOW_PAGE_LOCKS = { ON | OFF } ]
| [[,] IGNORE_DUP_KEY = { ON | OFF } ]
| [[,] STATISTICS_NORECOMPUTE = { ON | OFF }]
)
}[;]
主鍵你可以在表設計窗口選中要設置主鍵的列選擇設置主鍵即可,外鍵你可以右鍵,選擇關系,在里面添加即可。至于設置取值范圍你可以設置一個約束。
--修改主鍵 ALTER TABLE tablename --修改表復
ADD
CONSTRAINT tb_PRIMARY
PRIMARY KEY CLUSTERED (列名) /*將你要設置制為主鍵約束的列*/
--修改約束ALTER TABLE 銷售表 --修改表
ADD CONSTRAINT ck_sl --創建檢查約束
CHECK (數量 >= 1 and 數量 <= 10000) --添加約束條件
--修改外鍵alter table 表名
add constraint 外鍵名稱 foreign key (字段)
references 關系表名 (關系表內字段)
alter table 表名
add constraint 主鍵名稱 primary key (字段)
go
alter table 表名
add constraint 外鍵名稱 foreign key (字段)
references 關系內表名 (關系表內字容段)
go
create table table_name
colum_name datatype
[constraint constraint_name] [not] null primary key |unique
用sql server畫數據庫關系圖時,發現主碼只能給一個屬性,主碼是多個屬性怎么處理 ,
同時選多個屬性,再設主鍵。
初學數據庫,問個問題,如果屬性C是某關系的外碼,那么屬性C可以是非主屬性嗎(非候選碼)?
不可以
不可以!必須參照某些表的主碼。
可以
可以
數據庫問題
假設有學生表(學生,姓名,系) /*姓名唯一,可以做候選碼*/rn這樣的話我有點問題rn假設我選(學號,姓名)做主碼,(學號,姓名)——系,學號——姓名。3NFrnrn假設我選主碼是姓名rn則學號——系,學號——姓名,姓名——系,姓名——系,這樣不就是亂套拉,姓名將變的不再是主碼,說說問題出在哪序號-〉姓名 姓名-〉系,已經不是3NF了
1 第一范式(1NF)
在任何一個關系數據庫中,第一范式(1NF)是對關系模式的基本要求,不滿足第一范式(1NF)的數據庫就不是關系數據庫。
所謂第一范式(1NF)是指數據庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。如果出現重復的屬性,就可能需要定義一個新的實體,新的實體由重復的屬性構成,新實體與原實體之間為一對多關系。在第一范式(1NF)中表的每一行只包含一個實例的信息。例如,對于圖3-2 中的員工信息表,不能將員工信息都放在一列中顯示,也不能將其中的兩列或多列在一列中顯示;員工信息表的每一行只表示一個員工的信息,一個員工的信息在表中只出現一次。簡而言之,第一范式就是無重復的列。
2 第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基礎上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數據庫表中的每個實例或行必須可以被惟一地區分。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。如圖3-2 員工信息表中加上了員工編號(emp_id)列,因為每個員工的員工編號是惟一的,因此每個員工可以被惟一區分。這個惟一屬性列被稱為主關鍵字或主鍵、主碼。
第二范式(2NF)要求實體的屬性完全依賴于主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那么這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關系。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。簡而言之,第二范式就是非主屬性非部分依賴于主關鍵字。
3 第三范式(3NF)
滿足第三范式(3NF)必須先滿足第二范式(2NF)。簡而言之,第三范式(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那么在圖3-2的員工信息表中列出部門編號后就不能再將部門名稱、部門簡介等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三范式(3NF)也應該構建它,否則就會有大量的數據冗余。簡而言之,第三范式就是屬性不依賴于其它非主屬性。
數據庫中的非主屬性和主屬性、以及候選碼和關鍵碼分別指什么?
碼:代表數目的符號
主碼
我們在建立數據庫的時候,需要為每張版表指定一個主碼,主碼也權叫主鍵。
所謂主碼就是在實體集中區分不同實體的候選碼。
一個實體集中只能有一個主碼,但可以有多個候選碼。
必須注意兩點:
1.主碼的選擇必須慎重。
例如:人的姓名是不可以做主碼的,因為可能有多個人重名,而身份證可以做主碼。
2.主碼的選擇應該是那些從不或極少變化的屬性。
例如:一個人的地址就不應該作為主碼的一部分,因為它很可能變化
候選碼
若關系中的某一屬性組的值能唯一的標識一個元組,而其任何真子集都不能再標識,則稱該屬性組為候選碼。
例如:在學生實體中,“學號”是能唯一的區分學生實體的,同時又假設“姓名”、“年齡”的屬性組合足以區分學生實體,那么{學號}和{姓名,年齡}都是候選碼
主屬性
包含在任一候選關鍵字中的屬性稱主屬性。
非主屬性
不包含在主碼中的屬性稱為非主屬性。
非主屬性是相對與主屬性來定義的。
例如:在關系——學生(學號,姓名,年齡,性別,班級)中,主碼是“學號”,那么其他的“姓名”、“年齡”、“性別”、“班級”就都可以稱為非主屬性
相關推薦:
臨時身份證能貸款嗎(用臨時身份證可以辦貸款嗎)
身份證新規(辦理身份證新規)
電子合同糾紛解決(簽電子合同糾紛怎么解決)
現戶籍所在地怎么填寫(戶籍所在地怎么填寫)
超生新生兒如何上戶(超生如何給孩子上戶口)