數據庫主鍵類型及約束


1. 基礎理論:

1.主鍵和外鍵的設計原則。
a. 主鍵應盡量分離於業務的。
b. 主鍵應盡量是單列的,以便提高篩選和連接的效率。
c. 主鍵不應該被更新,且不含動態變化的數據。
d. 主鍵應是有計算機自動生成的。

2.常見的主鍵選取方式
a.自動增長。
b.手動增長字段
c.UniqueIdentifier
d.COMB Combine 組合類型
目前再項目中用到了a,c兩種。以下是優缺點
使用自增長做主鍵的優點:
1、很小的數據存儲空間
2、性能最好
3、容易記憶
使用自增長做主鍵的缺點:
1、如果存在大量的數據,可能會超出自增長的取值范圍
2、很難(並不是不能)處理分布式存儲的數據表,尤其是需要合並表的情況下
3、安全性低,因為是有規律的,容易被非法獲取數據
使用GUID做主鍵的優點:
1、它是獨一無二的,出現重復的機會少
2、適合大量數據中的插入和更新操作,尤其是在高並發和分布式環境下
3、跨服務器數據合並非常方便
4、安全性較高
使用GUID做主鍵的缺點:
1、存儲空間大(16 byte),因此它將會占用更多的磁盤空間
2、會降低性能
3、很難記憶

COMB Combine 組合類型的方法:uuid+時間

ID=CAST(CAST(NEWID() AS BINARY(10))   + CAST(GETDATE() AS BINARY(6)) AS UNIQUEIDENTIFIER)

    1

2. SQL 中的約束
2.1 Not Null
作用:強制字段始終包含值,若字段為null,無法插入或更新記錄。

/-- 創建表時添加 not  null 約束
create table table_NotNull
(
   ID int identity(1,1) primary key,
   Name varchar(50) not null
)
/--對已經存在是某列添加not null 約束
/--已存在的數據中 Name均有值
alter table dbo.table_NotNull alter column Name varchar(20) not null
/--已存在的數據中 存在Name為null 的情況。以后無法插入name=null 的數據
alter table dbo.table_NotNull with nocheck add constraint Name check(Name is not null)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

2.2 unique
作用:約束唯一標識數據庫-表中的每條數據。

create table table_Unique
(
  ID int primary key Identity(1,1) not null,
  Name varchar(50) unique,
  Age int not null
)
alter table table_Unique add unique(Age)

    1
    2
    3
    4
    5
    6
    7

2.3 primary key
作用:主鍵,記錄唯一標識,主鍵自動擁有not null及 unique約束。

/--定義多個列的primaey key 約束
create Table Table_PrimaryKey
(
   Code varchar(20),//自動約束為not null
   DateInfo datetime,//自動約束為not null
   Name varchar(20) not null,
   constraint pk_Table_PrimaryKey Primary Key(Code,DateInfo)
)
-- 主鍵列應申明不包含null 值
ALTER TABLE Table_PrimaryKey ADD PRIMARY KEY (Code )
ALTER TABLE Table_PrimaryKey ADD CONSTRAINT pk_PersonID PRIMARY KEY (Code,DateInfo)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

2.4 foreign key
作用:外鍵,預防破壞表之間的連接行為,防止非法數據插入外鍵列。

create Table Table_ForeignKey
(
   Id int identity(1,2) primary key,
   Code int,
   DateInfo datetime,
   constraint fk_ForeignKey foreign key(Code) references table_Unique(ID)
)
--撤銷外鍵約束 定義外鍵且已命名
ALTER TABLE [dbo].[Table_ForeignKey] drop constraint fk_ForeignKey

    1
    2
    3
    4
    5
    6
    7
    8
    9

2.5 Check
作用:限制列的取值范圍

create Table Table_Check
(
   Id int identity(1,2) primary key,
   Age int not null,
   State int,
   constraint ck_Check check(Age>20 and State in (0,1))
)
--刪除同上

    1
    2
    3
    4
    5
    6
    7
    8

2.6 DEFAULT
作用:設置默認值

create Table Table_DEFAULT
(
   Id int identity(1,2) primary key,
   Age int not null,
   State int,
   Name varchar(20) DEFAULT 'Sandnes'
)
--更改
ALTER TABLE Table_DEFAULT ALTER COLUMN City
SET DEFAULT 'ss' (drop DEFAULT )

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

參考:1. 優缺點 http://www.yyjjssnn.cn/articles/754.html
2. 4中常見方法 http://blog.sina.com.cn/s/blog_5f39af320102wsfs.html
3.sql 基礎:http://www.runoob.com/sql/sql-default.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM