當前位置:首頁 » 編程語言 » sql編碼基本原則
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql編碼基本原則

發布時間: 2022-08-09 18:43:28

sql中表達完整性約束的規則主要有哪幾種

1、實體完整性:規定表的每一行在表中是惟一的實體。

2、域完整性:是指表中的列必須滿足某種特定的數據類型約束,其中約束又包括取值范圍、精度等規定。

3、 參照完整性:是指兩個表的主關鍵字和外關鍵字的數據應一致,保證了表之間的數據的一致性,防止了數據丟失或無意義的數據在資料庫中擴散。

4、用戶定義的完整性:不同的關系資料庫系統根據其應用環境的不同,往往還需要一些特殊的約束條件。用戶定義的完整性即是針對某個特定關系資料庫的約束條件,它反映某一具體應用必須滿足的語義要求。


(1)sql編碼基本原則擴展閱讀

完整性約束的類型介紹:

1、與表有關的約束:是表中定義的一種約束。可在列定義時定義該約束,此時稱為列約束,也可以在表定義時定義約束,此時稱為表約束。

2、域(Domain)約束:在域定義中被定義的一種約束,它與在特定域中定義的任何列都有關系。

3、斷言(Assertion):在斷言定義時定義的一種約束,它可以與一個或多個表進行關聯。

⑵ SQL Server資料庫的高性能優化經驗總結

本文主要向大家介紹的是正確優化SQL
Server資料庫的經驗總結,其中包括在對其進行優化的實際操作中值得大家注意的地方描述,以及對SQL語句進行優化的最基本原則,以下就是文章的主要內容描述。
優化資料庫的注意事項:
1、關鍵欄位建立索引。
2、使用存儲過程,它使SQL變得更加靈活和高效。
3、備份資料庫和清除垃圾數據。
4、SQL語句語法的優化。(可以用Sybase的SQL
Expert,可惜我沒找到unexpired的序列號)
5、清理刪除日誌。
SQL語句優化的基本原則:
1、使用索引來更快地遍歷表。
預設情況下建立的索引是非群集索引,但有時它並不是最佳的。在非群集索引下,數據在物理上隨機存放在數據頁上。合理的索引設計要建立在對各種查詢的分析和預測上。
一般來說:
①.有大量重復值、且經常有范圍查詢(between,
>,<
,>=,<
=)和order
by、group
by發生的列,可考慮建立群集索引
②.經常同時存取多列,且每列都含有重復值可考慮建立組合索引;
③.組合索引要盡量使關鍵查詢形成索引覆蓋,其前導列一定是使用最頻繁的列。
2、IS
NULL

IS
NOT
NULL
不能用null作索引,任何包含null值的列都將不會被包含在索引中。即使索引有多列這樣的情況下,只要這些列中有一列含有null,該列就會從索引中排除。也就是說如果某列存在空值,即使對該列建索引也不會提高性能。任何在where子句中使用is
null或is
not
null的語句優化器是不允許使用索引的。
3、IN和EXISTS
EXISTS要遠比IN的效率高。裡面關繫到full
table
scan和range
scan。幾乎將所有的IN操作符子查詢改寫為使用EXISTS的子查詢。
4、在海量查詢時盡量少用格式轉換。
5、當在SQL
SERVER
2000中
如果存儲過程只有一個參數,並且是OUTPUT類型的,必須在調用這個存儲過程的時候給這個參數一個初始的值,否則會出現調用錯誤。
6、ORDER
BY和GROPU
BY
使用ORDER
BY和GROUP
BY短語,任何一種索引都有助於SELECT的性能提高。注意如果索引列裡面有NULL值,Optimizer將無法優化。
7、任何對列的操作都將導致表掃描,它包括SQL
Server資料庫函數、計算表達式等等,查詢時要盡可能將操作移至等號右邊。
8、IN、OR子句常會使用工作表,使索引失效。如果不產生大量重復值,可以考慮把子句拆開。拆開的子句中應該包含索引。
9、SET
SHOWPLAN_ALL>10、謹慎使用游標
在某些必須使用游標的場合,可考慮將符合條件的數據行轉入臨時表中,再對臨時表定義游標進行操作,這樣可使性能得到明顯提高。
注釋:所謂的優化就是WHERE子句利用了索引,不可優化即發生了表掃描或額外開銷。經驗顯示,SQL
Server資料庫性能的最大改進得益於邏輯的資料庫設計、索引設計和查詢設計方面。反過來說,最大的性能問題常常是由其中這些相同方面中的不足引起的。
其實SQL優化的實質就是在結果正確的前提下,用優化器可以識別的語句,充份利用索引,減少表掃描的I/O次數,盡量避免表搜索的發生。其實SQL的性能優化是一個復雜的過程,上述這些只是在應用層次的一種體現,深入研究還會涉及SQL
Server資料庫層的資源配置、網路層的流量控制以及操作系統層的總體設計。

⑶ 請問怎麼修改MS SQL資料庫的編碼方式啊

sql server 2000的unicode編碼有特殊性,僅僅在rails中使用utf8編碼,和把全部rails項目文件格式改成utf8之外,還是不夠的。僅僅這樣做,只是部分中文字元能夠正確處理,而且存入sql server2000中的中文數據,也完全是亂碼。正確的配置方法應該如下。

1. ms sql server2000中數據欄位全部要選擇成n打頭的類型,比如ntext,nvarchar等。

2.安裝ADO Driver
安裝one -click installer 來安裝ruby 的話就已經安裝了所有連接SQL Server使用的需求包.但是,並沒有安裝ADO Driver.
這樣來安裝它:

在Ruby目錄下找到這個目錄: \ruby\lib\ruby\site_ruby\1.8\DBD .例如:我的Ruby安裝在D:\ruby中,所以是這個目錄D:\ruby\lib\ruby\site_ruby\1.8\DBD 在該目錄中創建一個ADO文件夾. 下載Ruby-DBI,將lib/dbd_ado/ADO.rb文件拷貝到X:/ruby/lib/ruby/site_ruby/1.8/DBD/ADO/ADO.rb

3. 配置database.yml:Java代碼
development:
adapter: sqlserver
database: database_name
host: server_name
username: user_name
password: your_pw_here

development:
adapter: sqlserver
database: database_name
host: server_name
username: user_name
password: your_pw_here

4.在environment.rb添加下面代碼
require 'win32ole'
WIN32OLE.codepage = WIN32OLE::CP_UTF8

在這里稍微解釋下第四部分的設置。sql server 2000中使用的unicode 並非是utf8,ado的默認鏈接編碼都是當前系統設置的code pages相關的。

一般的windows設置都是非unicode的,比如簡體中文windows系統下一般都是gb2312, 在rails中database.yml設置encoding: utf8,對於sql server沒有任何用處。

為了迫使sql server接受utf8數據,必須修改ado鏈接的code pages值為utf8,才能讓ado部分代碼在接受rails傳入的utf8數據之後,不做任何額外的處理. 否則的話,ado部分代碼會根據當前系統的默認code pages值來處理這里字元數據。

於是在中文windows系統上,從utf8的rails項目中傳入的數據,會被當作gb2312編碼的數據來傳遞到sql server2000中,於是sql server2000中存入的數據會成為亂碼,也有部分數據在處理過程中出錯,導致sql 語句執行出錯。比如常見的中文字元右邊的單引號會不見的情況。

不設置 WIN32OLE.codepage = WIN32OLE::CP_UTF8,你的整個系統編碼配置是這樣的
rails(utf8)<-->ado(根據當前系統cp來取得編碼,或是gb2312或是其他)<-->sql server 2000 (unicode)
整個系統編碼不一至

WIN32OLE.codepage = WIN32OLE::CP_UTF8 這句代碼就是為了更改cp值.整個系統編碼配置是這樣的
rails(utf8)<-->ado(utf8)<-->sql server 2000 (unicode)
整個系統編碼一至,整個系統中不會再出現任何亂碼.

註:以上轉自:jack發表在javaeye網站上的文章,地址:http://www.javaeye.com/topic/53877

database.yml也可以用以下的配置試試(用下面這種的話第1條或許不用,沒試過)

⑷ 如何用SQL2005建立一個簡單的公司資料庫

一份設計合理的資料庫,對程序開發可以達到事半功倍的效果,對於後期維護、二次開發的重要性更是不言而喻。

數據設計、實現過程中的注意事件(個人觀點):

1.命名規范:

1)表:模塊前綴+英文單詞,如 BBS_UserInfo;
2)欄位:表前綴+英文單詞,如 U_Name;

2.三大範式:

盡量滿足資料庫設計三大範式。

第一範式(1NF)是指資料庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。
第二範式(2NF):要求資料庫表中的每個實例或行必須可以被惟一地區分,資料庫表中不存在非關鍵欄位對任一候選關鍵欄位的部分函數依賴(部分函數依賴指的是存在組合關鍵字中的某些欄位決定非關鍵欄位的情況),也即所有非關鍵欄位都完全依賴於任意一組候選關鍵字。
第三範式(3NF):要求一個資料庫表中不包含已在其它表中已包含的非主關鍵字信息,在第二範式的基礎上,數據表中如果不存在非關鍵欄位對任一候選關鍵欄位的傳遞函數依賴則符合第三範式。

3.數據結構:

建立必要的主外鍵關系、建立好多表查詢聯合查詢、復雜條件查詢的儲存過程等等。

4.保留資料庫設計文檔(這點對於二次開發尤為重要)。

--------------友情分割線(以下為收藏資料,已忘記原出處)--------------

1資料庫表及欄位命名、設計規范
1.1資料庫表資料庫表的命名規范:
表的前綴應該用系統或模塊的英文名的縮寫(全部大寫或首字母大寫)。如果系統功能簡單,沒有劃分為模塊,則可以以系統英文名稱的縮寫作為前綴,否則以各模塊的英文名稱縮寫作為前綴。例如:如果有一個模塊叫做BBS(縮寫為BBS),那麼你的資料庫中的所有對象的名稱都要加上這個前綴:BBS_ + 資料庫對象名稱,BBS_CustomerInfo標示論壇模塊中的客戶信息表
表的名稱必須是易於理解,能表達表的功能的英文單詞或縮寫英文單詞,無論是完整英文單詞還是縮寫英文單詞,單詞首字母必須大寫。如果當前表可用一個英文單詞表示的,請用完整的英文單詞來表示;例如:系統資料中的客戶表的表名可命名為:SYS_Customer。如果當前表需用兩個或兩個以上的單詞來表示時,盡量以完整形式書寫,如太長可採用兩個英文單詞的縮寫形式;例如:系統資料中的客戶物料表可命名為:SYS_CustItem。

表名稱不應該取得太長(一般不超過三個英文單詞)。
在命名表時,用單數形式表示名稱。例如,使用 Employee,而不是 Employees。
對於有主明細的表來說。明細表的名稱為:主表的名稱 + 字元Dts。例如:采購定單的名稱為:PO_Order,則采購定單的明細表為:PO_OrderDts
對於有主明細的表來說,明細表必須包含兩個欄位:主表關鍵字、SN,SN欄位的類型為int型,目的為與主表關鍵字聯合組成明細表的關鍵字,以及標示明細記錄的先後順序,如1,2,3……。
表必須填寫描述信息
後台表名盡量與前台表名相同,後台獨有的表應以_b作為後綴。如r_gggd_b
1.2表欄位
 命名規范
資料庫欄位的命名必須遵循以下規范:
採用有意義的欄位名。欄位的名稱必須是易於理解,能表達欄位功能的英文單詞或縮寫英文單詞,單詞首字母必須大寫,一般不超過三個英文單詞。例如:人員信息表中的電話號碼可命名為:Telephone或Tel。產品明細表中的產品名稱可用ProctName表示。(推薦一般用完整的英文單詞)。

系統中所有屬於內碼欄位(僅用於標示唯一性和程序內部用到的標示性欄位),名稱取為:「ID」,採用整型或長整型數,具體根據可能的數據量確定,增加記錄時取最大值加1,該欄位通常為主關鍵字。

系統中屬於是業務范圍內的編號的欄位,其代表一定的業務信息,比如資料信息和單據的編號,這樣的欄位建議命名為:「Code」,其數據類型為varchar,該欄位需加唯一索引。

在命名表的列時,不要重復表的名稱;例如,在名為 Employee 的表中避免使用名為 EmployeeLastName 的欄位。

不要在列的名稱中包含數據類型。

設計規范
所有欄位在設計時,除以下數據類型timestamp、image、datetime、smalldatetime、uniqueidentifier、binary、sql_variant、binary 、varbinary外,必須有默認值。字元型的默認值為一個空字元值串』』;數值型的默認值為數值0;邏輯型的默認值為數值0;
其中:系統中所有邏輯型中數值0表示為「假」;數值1表示為「真」。
datetime、smalldatetime類型的欄位沒有默認值,必須為NULL。

當欄位定義為字元串形時建議使用varchar而不用nvarchar。

建議在大多數表中(如報銷單,申請單),應都有以下欄位:
欄位名說明類型默認值
CreatorID創建者int0
CreatedTime創建時間DatetimeNULL

欄位的描述
資料庫中每個欄位的描述(Description)如下:

盡量遵守第三範式的標准(3NF)。
表內的每一個值只能被表達一次
表內的每一行都應當被唯一的標示
表內不應該存儲依賴於其他鍵的非鍵信息

如果欄位事實上是與其它表的關鍵字相關聯而未設計為外鍵引用,需建索引。

如果欄位與其它表的欄位相關聯,需建索引。

如果欄位需做模糊查詢之外的條件查詢,需建索引。

除了主關鍵字允許建立簇索引外,其它欄位所建索引必須為非簇索引。

欄位必須填寫描述信息

2存貯過程命名及設計規范
2.1命名規范
存貯過程的命名請遵循以下命名規范:USP _ + 系統模塊縮寫(與表前綴類似)+_ + 功能標識 + 代表存貯過程操作的主要表名(不帶前綴)或功能的英文單詞或英文單詞縮寫。
如果一個存貯過程只對一個表進行操作,建議存貯過程的名稱就用存貯過程所操作的表的表名(不帶前綴)。這樣有利於根據表名找到相應的存貯過程。
為了在眾多的存貯過程中能很快的找到並維護存貯過程,我們按存貯過程的作用將系統的存貯過程
進行以下的分類及命名:(以下示例假設存貯過程所在的模塊名為ORG)
作用第一前綴第二前綴名
(功能標識)示例
用於新增的存貯過程USP_ORGAddUSP_ORG_Add_Employee
用於修改的存貯過程USP_ORGUptUSP _ORG_Upt_Employee
用於刪除的存貯過程USP_ORGDelUSP _ORG_Del_Employee
用於單據查詢的存貯過程USP_ORGQryUSP _ORG_Qry_Employee
用於報表統計的存貯過程USP_ORGRptUSP _ORG_Rpt_GetEmployee
用於一些特殊過程處理的存貯過程USP_ORGOthUSP _ORG_Oth_SetSystemMessage

如果系統中的存貯過程只有一級,則遵照以上規則命名,如果存在多級,則需要區分其屬於哪一級,具體為:USP + 所屬的級次 + _ + 後面的部分
例如:
1.USP1_ORG_Add_Subject (沒有調用其它存貯過程)
2.USP2_ORG_Upt_Subject (調用了第1級的存貯過程)
3.USP3_ORG_Qry_Subject (調用了第2級的存貯過程)

2.2設計規范
在存貯過程中必須說明以下內容:
目的:說明此存貯過程的作用。
作者:首次創建此存貯過程的人的姓名。在此請使用中文全名,不允許使用英文簡稱。
創建日期:創建存貯過程時的日期。
修改記錄:
修改記錄需包含修改順序號、修改者、修改日期、修改原因,修改時不能直接在原來的代碼上修改,也不能刪除原來的代碼,只能先將原來的代碼注釋掉,再重新增加正確的代碼。修改順序號的形式為:log1,log2,log3。。。,根據修改次數順序增加,同時在注釋掉的原來的代碼塊和新增的正確代碼塊前後註明修改順序號。
對存貯過程各參數及變數的中文註解。
示例如下:

/*
目的:根據部門與物料和會計區間查詢生產現場領料匯總報表
作者:李奇
創建日期:2002-12-11
*/

/*
修改順序號:log1
修改者:劉敏
修改日期:2002.12.22
修改原因:(具體原因詳細描述)
*/

CREATE PROCEDURE [dbo].[USP_GetLMSSum]
@ProctionType int=1, --生產類型(1-自製;0-委外加工)
@DeptID int=0, --生產部門
@ItemID int=0, --物料
@StartDate datetime='2002-11-26',--會計區間開始日期
@EndDate datetime='2002-12-25'--會計區間截止日期
AS

/*
log1 old
--自製領料
INSERT INTO #LMSDts
SELECT dbo.iStockBill.DeptID, dbo.fDept.DeptName,
dbo.mLMS.ItemID AS ItemInterID, dbo.fItem.ItemID, dbo.fItem.ItemName,
ISNULL(dbo.fItem.Model, N'') AS Model, ISNULL(dbo.fUnit.UnitName, N'')
AS UnitName, dbo.mLMS.Qty, dbo.mLMS.TransType, dbo.mWO.OrderType,
dbo.mLMS.CreateTime
end log1 old
*/
--log1 new
--自製領料
INSERT INTO #LMSDts
SELECT dbo.iStockBill.DeptID, dbo.fDept.DeptName,
dbo.mLMS.ItemID AS ItemInterID, dbo.fItem.ItemID, dbo.fItem.ItemName,
ISNULL(dbo.fItem.Model, N'') AS Model, ISNULL(dbo.fUnit.UnitName, N'')
AS UnitName, dbo.mLMS.Qty, dbo.mLMS.TransType, dbo.mWO.OrderType,
dbo.mLMS.CreateTime
--end log1 new

3 視圖命名規范
3.1命名規范
視圖的命名請遵循以下命名規范:UV _ + 系統模塊縮寫(與表前綴類似)+_ + 功能標識 + 代表視圖查詢的主要表名(不帶前綴)或功能的英文單詞或英文單詞縮寫。
如果一個視圖只對一個表進行查詢,建議視圖的名稱就用視圖所查詢的表的表名(不帶前綴)。這樣有利於根據表名找到相應的視圖。
為了在眾多的視圖中能很快的找到並維護視圖,我們按其作用將系統的視圖
進行以下的分類及命名:(以下示例假設視圖所在的模塊名為ORG)
作用第一前綴第二前綴名
(功能標識)示例
用於單據查詢的視圖UV_ORGQryUV_ORG_Qry_Employee
用於報表統計的視圖UV_ORGRptUV_ORG_Rpt_GetEmployee
用於一些特殊過程處理的視圖UV_ORGOthUV_ORG_Oth_SetSystemMessage

如果系統中的視圖只有一級,則遵照以上規則命名,如果存在多級,則需要區分其屬於哪一級,具體為:UV + 所屬的級次 + _ + 後面的部分
例如:
UV1_ORG_Add_Subject (沒有調用其它視圖)
UV2_ORG_Upt_Subject (調用了第1級的視圖)
UV3_ORG_Qry_Subject (調用了第2級的視圖)

3.2 設計規范
在視圖中必須說明以下內容:
目的:說明此視圖的作用。
創建者:首次創建此視圖的人的姓名。在此請使用中文全名,不允許使用英文簡稱。
修改者、修改日期、修改原因:如果有人對此視圖進行了修改,則必須在此視圖的前面加註修改者姓名、修改日期及修改原因。
對視圖各參數及變數的中文註解。
示例如下:
/*
目的:查詢本月所要培訓的科目
創建:加菲貓
時間:2001-3-3
修改者:Dyan 修改日期:2002-12-11
修改原因及內容:學員不需要培訓,將不需要培訓的課程去掉。
修改者:周明 修改日期:2002-4-2
修改原因及內容:增加一門新課程
*/
CREATE VIEW dbo.USP_AddSubject
AS
SELECT SubjectIId AS 課程編號
FROM dbo.ZfLocaleDecide

3.3 存儲過程和事務處理
如果事務處理在存儲過程返回時的嵌套層次與執行時的層次不同,SQL Server會顯示信息提示事務處理嵌套失控。因為存儲過程並不異常終止該批處理,在執行和確認隨後的語句時,過程內的rollback tran 會導致數據完整性損失。
在編寫存儲過程時,應遵守以下原則:
1.過程對@@trancount應無凈改變。
2.僅當存儲過程發出begin tran語句時,才發出rollback tran。

3.4 其他注意事項
存儲過程應該堅實可靠的,因為它們是駐留在伺服器中,被頻繁使用的。應仔細檢查參數的有效性,並在有問題時返回出錯信息。應確保參數的數據類型和被比較的欄的數據類型匹配,從而避免數據類型匹配錯誤。在每個SQL語句之後要檢查@@error。

4觸發器編碼規范
4.1命名規范
觸發器名為相應的表名加上後綴

Insert觸發器加'_i',Delete觸發器加'_d',Update觸發器加'_u',如:r_bch_i,r_bch_d,r_bch_u。

4.2 設計規范
在觸發器中必須說明以下內容:
目的:說明此觸發器的作用。
創建者:首次創建人的姓名。在此請使用中文全名,不允許使用英文簡稱。
修改者、修改日期、修改原因:如果有人對此視圖進行了修改,則必須在此視圖的前面加註修改者姓名、修改日期及修改原因。
對其中各參數及變數的中文註解。

4.3範例
下面通過一個例子,說明觸發器編程中應遵守的規范:

/* delete related r_a according to deleted table */
CREATE TRIGGER r_a_d ON r_a
FOR DELETE
AS
IF @@ROWCOUNT = 0 -no rows deleted
RETURN

/* delete r_b table related to deleted table */
DELETE r_b
FROM r_b b, deleted d
WHERE b.id=d.id
IF @@ERROR != 0
BEGIN
RAISERROR("Error occurred deleting related records", 16, 1)
ROLLBACK TRAN
END
RETURN

作以下幾點說明:
1.檢查是否有行被修改。注意:不論數據是否被修改,觸發器都會引發,執行情況取決於T-SQL語句的執行,而和任何潛在的where子句是否執行無關。
2.因為被刪除行在該表中不再可用,所以應在被刪除的表中查看。
3.檢查T-SQL語句的返回代碼,以捕獲任何出錯條件。
4.4 事務過程中的觸發器
1.觸發器內的rollback將所有工作返回至最外層的begin tran,完成觸發器內的處理並異常終止當前的批處理。
2.不可以從觸發器內部返回至某個已命名的事務過程,這將產生運行錯誤,掛起所有工作並終止批處理。
5 SQL語言編碼規范
5.1所有關鍵字必須大寫。
如:INSERT、UPDATE、DELETE、SELECT及其子句。
IF……ELSE、CASE、DECLARE等。

所有函數及其參數中除用戶變數以外的部分必須大寫。

在定義變數時用到的數據類型必須小寫。
所有關鍵字必須大寫
5.2注釋
注釋可以包含在批處理中。在觸發器、存儲過程中包含描述性注釋將大大增加文本的可讀性和可維護性。本規范建議:
1、注釋以英文為主。
實際應用中,發現以中文注釋的SQL語句版本在英文環境中不可用。為避免後續版本執行過程中發生某些異常錯誤,建議使用英文注釋。
2、注釋盡可能詳細、全面。
創建每一數據對象前,應具體描述該對象的功能和用途。
傳入參數的含義應該有所說明。如果取值范圍確定,也應該一並說明。取值有特定含義的變數(如boolean類型變數),應給出每個值的含義。
3、注釋語法包含兩種情況:單行注釋、多行注釋
單行注釋:注釋前有兩個連字元(--),最後以行尾序列(CR-LF)結束。一般,對變數、條件子句可以採用該類注釋。
多行注釋:符號/*和*/之間的內容為注釋內容。對某項完整的操作建議使用該類注釋。
4、注釋簡潔,同時應描述清晰。
5函數注釋:
編寫函數文本--如觸發器、存儲過程以及其他數據對象--時,必須為每個函數增加適當注釋。該注釋以多行注釋為主,主要結構如下:
/************************************************************************
*name : --函數名
*function : --函數功能
*input : --輸入參數
*output : --輸出參數
*author : --作者
*CreateDate : --創建時間
*UpdateDate : --函數更改信息(包括作者、時間、更改內容等)
*************************************************************************/
CREATE PROCEDURE sp_xxx


5.3條件執行語句if…else
條件語句塊(statenemt block,以 begin…end為邊界)僅在if子句的條件為真時才被執行。
為提高代碼的可讀性,建議嵌套不多於5層。還有,當嵌套層次太多時,應該考慮是否可以使用case語句。

5.4重復執行while和跳轉語句goto
需要多次執行的語句,可以使用while結構。其中,控制while循環的條件在任何處理開始之前需要先執行一次。循環體中的保留字break無條件的退出while循環,然後繼續處理後續語句;保留字continue重新計算while條件,如果條件為真,則從循環開始處重新執行各語句。
使用跳轉語句goto和標簽label也可以方便地實現循環和其他更靈活的操作。SQL SERVER僅具有單通道語法分析器,因此不能解析對尚未創建的對象所做的前向參考。換言之,跳轉到某標簽的後續語句應該是可執行的(如不存在可能尚未創建的數據對象)。

5.5書寫格式
資料庫伺服器端的觸發器和存儲過程是一類特殊的文本,為方便開發和維護,提高代碼的易讀性和可維護性。規范建議按照分級縮進格式編寫該文本。
順序執行的各命令位於同一級;條件語句塊(statenemt block,以 begin…end為邊界)位於下一級,類推。
SQL語句是該文本的主體。為適應某些教復雜的用戶需求,SQL語句可能比較龐大。為方便閱讀和維護,規范建議按照SQL語句中系統保留字的關鍵程度再劃分為三級。具體分級請參照下表。其中,非系統保留字(如欄位名、數據表名、標點符號)相對本級保留字再縮進一級。多個連續的非保留字可以分行書寫,也可以寫在同一行。當WHERE包含的條件子句教復雜時,應該每行只寫一個條件分句,並為重要的條件字句填寫單行注釋。
在保證基本縮進格式的前提下,可以通過對齊某些重要關鍵字(如條件關鍵字AND、OR,符號 = 、 <> 等)來進一步提高文本的易讀性和可維護性。
相鄰兩級的縮進量為10個空格。這也是ISQL編輯器默認的文本縮進量。另外,在ISQL編輯器中,一個TAB鍵也相當於10個空格。

6數據對象的國際化
6.1關於數據對象的命名
數據對象和變數的命名一律採用英文字元。禁止使用中文命名。其他命名注意事項和規范請參考2命名規則。

6.2關於RAISERROR
SQL SERVER 系統的RAISERROR命令能夠把某個出錯情況返回給調用過程,這對說明調用過程的執行情況很有必要;同時可以部分避免客戶端的冗餘操作。另外,結合系統存儲過程sp_addmessage和sp_dropmessage可以方便實現數據對象在SQL SERVER端的國際化。
SQL SERVER的MASTER資料庫中有錯誤信息數據表sysmessages,專門用於存儲系統和用戶的錯誤提示及相關信息(如錯誤ID號、錯誤等級、狀態)。用戶可以調用sp_addmessage和sp_dropmessage預先將各類錯誤信息記入該數據表。其中,不同的錯誤信息用錯誤ID號區分。在編寫存儲過程代碼時,調用RAISERROR函數從錯誤信息表sysmessages中引用相關錯誤ID號的錯誤信息。
由於0~50000的值是保留為 SQL SERVER使用的,所以用戶自定義錯誤信息的錯誤ID號必須大於50000。
RAISERROR的語法如下:
RAISERROR ({msg_id | msg_str}, severity, state )
本規范建議存儲過程以RAISERROR和RETURN返回。
舉例如下:
l第一步:生成該錯誤信息
/*insert a error message into the master..sysmessages*/
sp_addMessage 50001 ,16 ,'Can"t update the primary key from table %s'

l第二步:執行存儲過程sp_xxx,異常返回時引用上述錯誤信息
CREATE PROCEDURE sp_xxx
BEGIN

RAISERROR(50001 ,16 ,1 ,'r_a') -- Can"t update the primary key from table r_a
ROLLBACK TRAN
RETURN(1)
END

l第三步:在DELPHI調用中,通過EDBEngineError捕捉該錯誤
try
sp_test.execProc ;
except
on e :EDBEngineError
if e.errors[1].errorcode = 13059 then
/*hint 'Can"t update the primary key from table r_a'*/
showMessage(e.errors[1].message)
end ;

l第四步:當不再使用該錯誤信息時,應該從錯誤信息表中刪除相應數據
sp_dropMessage 50001

l第五步:錯誤提示信息國際化
用相應語言替換master..sysmessages表中用戶自定義的錯誤消息即可。

------------------------------------------

⑸ sql資料庫設計

一、資料庫設計過程
資料庫技術是信息資源管理最有效的手段。資料庫設計是指對於一個給定的應用環境,構造最優的資料庫模式,建立資料庫及其應用系統,有效存儲數據,滿足用戶信息要求和處理要求。
資料庫設計中需求分析階段綜合各個用戶的應用需求(現實世界的需求),在概念設計階段形成獨立於機器特點、獨立於各個DBMS產品的概念模式(信息世界模型),用E-R圖來描述。在邏輯設計階段將E-R圖轉換成具體的資料庫產品支持的數據模型如關系模型,形成資料庫邏輯模式。然後根據用戶處理的要求,安全性的考慮,在基本表的基礎上再建立必要的視圖(VIEW)形成數據的外模式。在物理設計階段根據DBMS特點和處理的需要,進行物理存儲安排,設計索引,形成資料庫內模式。
1. 需求分析階段
需求收集和分析,結果得到數據字典描述的數據需求(和數據流圖描述的處理需求)。
需求分析的重點是調查、收集與分析用戶在數據管理中的信息要求、處理要求、安全性與完整性要求。
需求分析的方法:調查組織機構情況、調查各部門的業務活動情況、協助用戶明確對新系統的各種要求、確定新系統的邊界。
常用的調查方法有: 跟班作業、開調查會、請專人介紹、詢問、設計調查表請用戶填寫、查閱記錄。
分析和表達用戶需求的方法主要包括自頂向下和自底向上兩類方法。自頂向下的結構化分析方法(Structured Analysis,簡稱SA方法)從最上層的系統組織機構入手,採用逐層分解的方式分析系統,並把每一層用數據流圖和數據字典描述。
數據流圖表達了數據和處理過程的關系。系統中的數據則藉助數據字典(Data Dictionary,簡稱DD)來描述。
數據字典是各類數據描述的集合,它是關於資料庫中數據的描述,即元數據,而不是數據本身。數據字典通常包括數據項、數據結構、數據流、數據存儲和處理過程五個部分(至少應該包含每個欄位的數據類型和在每個表內的主外鍵)。
數據項描述={數據項名,數據項含義說明,別名,數據類型,長度,
取值范圍,取值含義,與其他數據項的邏輯關系}
數據結構描述={數據結構名,含義說明,組成:{數據項或數據結構}}
數據流描述={數據流名,說明,數據流來源,數據流去向,
組成:{數據結構},平均流量,高峰期流量}
數據存儲描述={數據存儲名,說明,編號,流入的數據流,流出的數據流,
組成:{數據結構},數據量,存取方式}
處理過程描述={處理過程名,說明,輸入:{數據流},輸出:{數據流},
處理:{簡要說明}}
2. 概念結構設計階段
通過對用戶需求進行綜合、歸納與抽象,形成一個獨立於具體DBMS的概念模型,可以用E-R圖表示。
概念模型用於信息世界的建模。概念模型不依賴於某一個DBMS支持的數據模型。概念模型可以轉換為計算機上某一DBMS支持的特定數據模型。
概念模型特點:
(1) 具有較強的語義表達能力,能夠方便、直接地表達應用中的各種語義知識。
(2) 應該簡單、清晰、易於用戶理解,是用戶與資料庫設計人員之間進行交流的語言。
概念模型設計的一種常用方法為IDEF1X方法,它就是把實體-聯系方法應用到語義數據模型中的一種語義模型化技術,用於建立系統信息模型。
使用IDEF1X方法創建E-R模型的步驟如下所示:
2.1 第零步——初始化工程
這個階段的任務是從目的描述和范圍描述開始,確定建模目標,開發建模計劃,組織建模隊伍,收集源材料,制定約束和規范。收集源材料是這階段的重點。通過調查和觀察結果,業務流程,原有系統的輸入輸出,各種報表,收集原始數據,形成了基本數據資料表。
2.2 第一步——定義實體
實體集成員都有一個共同的特徵和屬性集,可以從收集的源材料——基本數據資料表中直接或間接標識出大部分實體。根據源材料名字表中表示物的術語以及具有「代碼」結尾的術語,如客戶代碼、代理商代碼、產品代碼等將其名詞部分代表的實體標識出來,從而初步找出潛在的實體,形成初步實體表。
2.3 第二步——定義聯系
IDEF1X模型中只允許二元聯系,n元聯系必須定義為n個二元聯系。根據實際的業務需求和規則,使用實體聯系矩陣來標識實體間的二元關系,然後根據實際情況確定出連接關系的勢、關系名和說明,確定關系類型,是標識關系、非標識關系(強制的或可選的)還是非確定關系、分類關系。如果子實體的每個實例都需要通過和父實體的關系來標識,則為標識關系,否則為非標識關系。非標識關系中,如果每個子實體的實例都與而且只與一個父實體關聯,則為強制的,否則為非強制的。如果父實體與子實體代表的是同一現實對象,那麼它們為分類關系。
2.4 第三步——定義碼
通過引入交叉實體除去上一階段產生的非確定關系,然後從非交叉實體和獨立實體開始標識侯選碼屬性,以便唯一識別每個實體的實例,再從侯選碼中確定主碼。為了確定主碼和關系的有效性,通過非空規則和非多值規則來保證,即一個實體實例的一個屬性不能是空值,也不能在同一個時刻有一個以上的值。找出誤認的確定關系,將實體進一步分解,最後構造出IDEF1X模型的鍵基視圖(KB圖)。
2.5 第四步——定義屬性
從源數據表中抽取說明性的名詞開發出屬性表,確定屬性的所有者。定義非主碼屬性,檢查屬性的非空及非多值規則。此外,還要檢查完全依賴函數規則和非傳遞依賴規則,保證一個非主碼屬性必須依賴於主碼、整個主碼、僅僅是主碼。以此得到了至少符合關系理論第三範式的改進的IDEF1X模型的全屬性視圖。
2.6 第五步——定義其他對象和規則
定義屬性的數據類型、長度、精度、非空、預設值、約束規則等。定義觸發器、存儲過程、視圖、角色、同義詞、序列等對象信息。
3. 邏輯結構設計階段
將概念結構轉換為某個DBMS所支持的數據模型(例如關系模型),並對其進行優化。設計邏輯結構應該選擇最適於描述與表達相應概念結構的數據模型,然後選擇最合適的DBMS。
將E-R圖轉換為關系模型實際上就是要將實體、實體的屬性和實體之間的聯系轉化為關系模式,這種轉換一般遵循如下原則:
1)一個實體型轉換為一個關系模式。實體的屬性就是關系的屬性。實體的碼就是關系的碼。
2)一個m:n聯系轉換為一個關系模式。與該聯系相連的各實體的碼以及聯系本身的屬性均轉換為關系的屬性。而關系的碼為各實體碼的組合。
3)一個1:n聯系可以轉換為一個獨立的關系模式,也可以與n端對應的關系模式合並。如果轉換為一個獨立的關系模式,則與該聯系相連的各實體的碼以及聯系本身的屬性均轉換為關系的屬性,而關系的碼為n端實體的碼。
4)一個1:1聯系可以轉換為一個獨立的關系模式,也可以與任意一端對應的關系模式合並。
5)三個或三個以上實體間的一個多元聯系轉換為一個關系模式。與該多元聯系相連的各實體的碼以及聯系本身的屬性均轉換為關系的屬性。而關系的碼為各實體碼的組合。
6)同一實體集的實體間的聯系,即自聯系,也可按上述1:1、1:n和m:n三種情況分別處理。
7)具有相同碼的關系模式可合並。
為了進一步提高資料庫應用系統的性能,通常以規范化理論為指導,還應該適當地修改、調整數據模型的結構,這就是數據模型的優化。確定數據依賴。消除冗餘的聯系。確定各關系模式分別屬於第幾範式。確定是否要對它們進行合並或分解。一般來說將關系分解為3NF的標准,即:
表內的每一個值都只能被表達一次。
•?表內的每一行都應該被唯一的標識(有唯一鍵)。
表內不應該存儲依賴於其他鍵的非鍵信息。
4. 資料庫物理設計階段
為邏輯數據模型選取一個最適合應用環境的物理結構(包括存儲結構和存取方法)。根據DBMS特點和處理的需要,進行物理存儲安排,設計索引,形成資料庫內模式。
5. 資料庫實施階段
運用DBMS提供的數據語言(例如SQL)及其宿主語言(例如C),根據邏輯設計和物理設計的結果建立資料庫,編制與調試應用程序,組織數據入庫,並進行試運行。 資料庫實施主要包括以下工作:用DDL定義資料庫結構、組織數據入庫 、編制與調試應用程序、資料庫試運行
6. 資料庫運行和維護階段
資料庫應用系統經過試運行後即可投入正式運行。在資料庫系統運行過程中必須不斷地對其進行評價、調整與修改。包括:資料庫的轉儲和恢復、資料庫的安全性、完整性控制、資料庫性能的監督、分析和改進、資料庫的重組織和重構造。

建模工具的使用
為加快資料庫設計速度,目前有很多資料庫輔助工具(CASE工具),如Rational公司的Rational Rose,CA公司的Erwin和Bpwin,Sybase公司的PowerDesigner以及Oracle公司的Oracle Designer等。
ERwin主要用來建立資料庫的概念模型和物理模型。它能用圖形化的方式,描述出實體、聯系及實體的屬性。ERwin支持IDEF1X方法。通過使用ERwin建模工具自動生成、更改和分析IDEF1X模型,不僅能得到優秀的業務功能和數據需求模型,而且可以實現從IDEF1X模型到資料庫物理設計的轉變。ERwin工具繪制的模型對應於邏輯模型和物理模型兩種。在邏輯模型中,IDEF1X工具箱可以方便地用圖形化的方式構建和繪制實體聯系及實體的屬性。在物理模型中,ERwin可以定義對應的表、列,並可針對各種資料庫管理系統自動轉換為適當的類型。
設計人員可根據需要選用相應的資料庫設計建模工具。例如需求分析完成之後,設計人員可以使用Erwin畫ER圖,將ER圖轉換為關系數據模型,生成資料庫結構;畫數據流圖,生成應用程序。
二、資料庫設計技巧
1. 設計資料庫之前(需求分析階段)
1) 理解客戶需求,詢問用戶如何看待未來需求變化。讓客戶解釋其需求,而且隨著開發的繼續,還要經常詢問客戶保證其需求仍然在開發的目的之中。
2) 了解企業業務可以在以後的開發階段節約大量的時間。
3) 重視輸入輸出。
在定義資料庫表和欄位需求(輸入)時,首先應檢查現有的或者已經設計出的報表、查詢和視圖(輸出)以決定為了支持這些輸出哪些是必要的表和欄位。
舉例:假如客戶需要一個報表按照郵政編碼排序、分段和求和,你要保證其中包括了單獨的郵政編碼欄位而不要把郵政編碼糅進地址欄位里。
4) 創建數據字典和ER 圖表
ER 圖表和數據字典可以讓任何了解資料庫的人都明確如何從資料庫中獲得數據。ER圖對表明表之間關系很有用,而數據字典則說明了每個欄位的用途以及任何可能存在的別名。對SQL 表達式的文檔化來說這是完全必要的。
5) 定義標準的對象命名規范
資料庫各種對象的命名必須規范。
2. 表和欄位的設計(資料庫邏輯設計)
表設計原則
1) 標准化和規范化
數據的標准化有助於消除資料庫中的數據冗餘。標准化有好幾種形式,但Third Normal Form(3NF)通常被認為在性能、擴展性和數據完整性方面達到了最好平衡。簡單來說,遵守3NF 標準的資料庫的表設計原則是:「One Fact in One Place」即某個表只包括其本身基本的屬性,當不是它們本身所具有的屬性時需進行分解。表之間的關系通過外鍵相連接。它具有以下特點:有一組表專門存放通過鍵連接起來的關聯數據。
舉例:某個存放客戶及其有關定單的3NF 資料庫就可能有兩個表:Customer 和Order。Order 表不包含定單關聯客戶的任何信息,但表內會存放一個鍵值,該鍵指向Customer 表裡包含該客戶信息的那一行。
事實上,為了效率的緣故,對表不進行標准化有時也是必要的。
2) 數據驅動
採用數據驅動而非硬編碼的方式,許多策略變更和維護都會方便得多,大大增強系統的靈活性和擴展性。
舉例,假如用戶界面要訪問外部數據源(文件、XML 文檔、其他資料庫等),不妨把相應的連接和路徑信息存儲在用戶界面支持表裡。還有,如果用戶界面執行工作流之類的任務(發送郵件、列印信箋、修改記錄狀態等),那麼產生工作流的數據也可以存放在資料庫里。角色許可權管理也可以通過數據驅動來完成。事實上,如果過程是數據驅動的,你就可以把相當大的責任推給用戶,由用戶來維護自己的工作流過程。
3) 考慮各種變化
在設計資料庫的時候考慮到哪些數據欄位將來可能會發生變更。
舉例,姓氏就是如此(注意是西方人的姓氏,比如女性結婚後從夫姓等)。所以,在建立系統存儲客戶信息時,在單獨的一個數據表裡存儲姓氏欄位,而且還附加起始日和終止日等欄位,這樣就可以跟蹤這一數據條目的變化。

欄位設計原則
4) 每個表中都應該添加的3 個有用的欄位
•?dRecordCreationDate,在VB 下默認是Now(),而在SQL Server 下默認為GETDATE()
•?sRecordCreator,在SQL Server 下默認為NOT NULL DEFAULT USER
•?nRecordVersion,記錄的版本標記;有助於准確說明記錄中出現null 數據或者丟失數據的原因
5) 對地址和電話採用多個欄位
描述街道地址就短短一行記錄是不夠的。Address_Line1、Address_Line2 和Address_Line3 可以提供更大的靈活性。還有,電話號碼和郵件地址最好擁有自己的數據表,其間具有自身的類型和標記類別。
6) 使用角色實體定義屬於某類別的列
在需要對屬於特定類別或者具有特定角色的事物做定義時,可以用角色實體來創建特定的時間關聯關系,從而可以實現自我文檔化。
舉例:用PERSON 實體和PERSON_TYPE 實體來描述人員。比方說,當John Smith, Engineer 提升為John Smith, Director 乃至最後爬到John Smith, cio 的高位,而所有你要做的不過是改變兩個表PERSON 和PERSON_TYPE 之間關系的鍵值,同時增加一個日期/時間欄位來知道變化是何時發生的。這樣,你的PERSON_TYPE 表就包含了所有PERSON 的可能類型,比如Associate、Engineer、Director、CIO 或者CEO 等。還有個替代辦法就是改變PERSON 記錄來反映新頭銜的變化,不過這樣一來在時間上無法跟蹤個人所處位置的具體時間。
7) 選擇數字類型和文本類型盡量充足
在SQL 中使用smallint 和tinyint 類型要特別小心。比如,假如想看看月銷售總額,總額欄位類型是smallint,那麼,如果總額超過了$32,767 就不能進行計算操作了。
而ID 類型的文本欄位,比如客戶ID 或定單號等等都應該設置得比一般想像更大。假設客戶ID 為10 位數長。那你應該把資料庫表欄位的長度設為12 或者13 個字元長。但這額外占據的空間卻無需將來重構整個資料庫就可以實現資料庫規模的增長了。
8) 增加刪除標記欄位
在表中包含一個「刪除標記」欄位,這樣就可以把行標記為刪除。在關系資料庫里不要單獨刪除某一行;最好採用清除數據程序而且要仔細維護索引整體性。
3. 選擇鍵和索引(資料庫邏輯設計)
鍵選擇原則:
1) 鍵設計4 原則
•?為關聯欄位創建外鍵。
•?所有的鍵都必須唯一。
•?避免使用復合鍵。
•?外鍵總是關聯唯一的鍵欄位。
2) 使用系統生成的主鍵
設計資料庫的時候採用系統生成的鍵作為主鍵,那麼實際控制了資料庫的索引完整性。這樣,資料庫和非人工機制就有效地控制了對存儲數據中每一行的訪問。採用系統生成鍵作為主鍵還有一個優點:當擁有一致的鍵結構時,找到邏輯缺陷很容易。
3) 不要用用戶的鍵(不讓主鍵具有可更新性)
在確定採用什麼欄位作為表的鍵的時候,可一定要小心用戶將要編輯的欄位。通常的情況下不要選擇用戶可編輯的欄位作為鍵。
4) 可選鍵有時可做主鍵
把可選鍵進一步用做主鍵,可以擁有建立強大索引的能力。

索引使用原則:
索引是從資料庫中獲取數據的最高效方式之一。95%的資料庫性能問題都可以採用索引技術得到解決。
1) 邏輯主鍵使用唯一的成組索引,對系統鍵(作為存儲過程)採用唯一的非成組索引,對任何外鍵列採用非成組索引。考慮資料庫的空間有多大,表如何進行訪問,還有這些訪問是否主要用作讀寫。
2) 大多數資料庫都索引自動創建的主鍵欄位,但是可別忘了索引外鍵,它們也是經常使用的鍵,比如運行查詢顯示主表和所有關聯表的某條記錄就用得上。
3) 不要索引memo/note 欄位,不要索引大型欄位(有很多字元),這樣作會讓索引佔用太多的存儲空間。
4) 不要索引常用的小型表
不要為小型數據表設置任何鍵,假如它們經常有插入和刪除操作就更別這樣作了。對這些插入和刪除操作的索引維護可能比掃描表空間消耗更多的時間。

4. 數據完整性設計(資料庫邏輯設計)
1) 完整性實現機制:
實體完整性:主鍵
參照完整性:
父表中刪除數據:級聯刪除;受限刪除;置空值
父表中插入數據:受限插入;遞歸插入
父表中更新數據:級聯更新;受限更新;置空值
DBMS對參照完整性可以有兩種方法實現:外鍵實現機制(約束規則)和觸發器實現機制
用戶定義完整性:
NOT NULL;CHECK;觸發器
2) 用約束而非商務規則強制數據完整性
採用資料庫系統實現數據的完整性。這不但包括通過標准化實現的完整性而且還包括數據的功能性。在寫數據的時候還可以增加觸發器來保證數據的正確性。不要依賴於商務層保證數據完整性;它不能保證表之間(外鍵)的完整性所以不能強加於其他完整性規則之上。
3) 強制指示完整性
在有害數據進入資料庫之前將其剔除。激活資料庫系統的指示完整性特性。這樣可以保持數據的清潔而能迫使開發人員投入更多的時間處理錯誤條件。
4) 使用查找控制數據完整性
控制數據完整性的最佳方式就是限制用戶的選擇。只要有可能都應該提供給用戶一個清晰的價值列表供其選擇。這樣將減少鍵入代碼的錯誤和誤解同時提供數據的一致性。某些公共數據特別適合查找:國家代碼、狀態代碼等。
5) 採用視圖
為了在資料庫和應用程序代碼之間提供另一層抽象,可以為應用程序建立專門的視圖而不必非要應用程序直接訪問數據表。這樣做還等於在處理資料庫變更時給你提供了更多的自由。
5. 其他設計技巧
1) 避免使用觸發器
觸發器的功能通常可以用其他方式實現。在調試程序時觸發器可能成為干擾。假如你確實需要採用觸發器,你最好集中對它文檔化。
2) 使用常用英語(或者其他任何語言)而不要使用編碼
在創建下拉菜單、列表、報表時最好按照英語名排序。假如需要編碼,可以在編碼旁附上用戶知道的英語。
3) 保存常用信息
讓一個表專門存放一般資料庫信息非常有用。在這個表裡存放資料庫當前版本、最近檢查/修復(對Access)、關聯設計文檔的名稱、客戶等信息。這樣可以實現一種簡單機制跟蹤資料庫,當客戶抱怨他們的資料庫沒有達到希望的要求而與你聯系時,這樣做對非客戶機/伺服器環境特別有用。
4) 包含版本機制
在資料庫中引入版本控制機制來確定使用中的資料庫的版本。時間一長,用戶的需求總是會改變的。最終可能會要求修改資料庫結構。把版本信息直接存放到資料庫中更為方便。
5) 編制文檔
對所有的快捷方式、命名規范、限制和函數都要編制文檔。
採用給表、列、觸發器等加註釋的資料庫工具。對開發、支持和跟蹤修改非常有用。
對資料庫文檔化,或者在資料庫自身的內部或者單獨建立文檔。這樣,當過了一年多時間後再回過頭來做第2 個版本,犯錯的機會將大大減少。
6) 測試、測試、反復測試
建立或者修訂資料庫之後,必須用用戶新輸入的數據測試數據欄位。最重要的是,讓用戶進行測試並且同用戶一道保證選擇的數據類型滿足商業要求。測試需要在把新資料庫投入實際服務之前完成。
7) 檢查設計
在開發期間檢查資料庫設計的常用技術是通過其所支持的應用程序原型檢查資料庫。換句話說,針對每一種最終表達數據的原型應用,保證你檢查了數據模型並且查看如何取出數據。
三、資料庫命名規范
1. 實體(表)的命名
1) 表以名詞或名詞短語命名,確定表名是採用復數還是單數形式,此外給表的別名定義簡單規則(比方說,如果表名是一個單詞,別名就取單詞的前4 個字母;如果表名是兩個單詞,就各取兩個單詞的前兩個字母組成4 個字母長的別名;如果表的名字由3 個單片語成,從頭兩個單詞中各取一個然後從最後一個單詞中再取出兩個字母,結果還是組成4 字母長的別名,其餘依次類推)
對工作用表來說,表名可以加上前綴WORK_ 後面附上採用該表的應用程序的名字。在命名過程當中,根據語義拼湊縮寫即可。注意,由於ORCLE會將欄位名稱統一成大寫或者小寫中的一種,所以要求加上下劃線。
舉例:
定義的縮寫 Sales: Sal 銷售;
Order: Ord 訂單;
Detail: Dtl 明細;
則銷售訂單明細表命名為:Sal_Ord_Dtl;
2) 如果表或者是欄位的名稱僅有一個單詞,那麼建議不使用縮寫,而是用完整的單詞。
舉例:
定義的縮寫 Material Ma 物品;
物品表名為:Material, 而不是 Ma.
但是欄位物品編碼則是:Ma_ID;而不是Material_ID
3) 所有的存儲值列表的表前面加上前綴Z
目的是將這些值列表類排序在資料庫最後。
4) 所有的冗餘類的命名(主要是累計表)前面加上前綴X
冗餘類是為了提高資料庫效率,非規范化資料庫的時候加入的欄位或者表
5) 關聯類通過用下劃線連接兩個基本類之後,再加前綴R的方式命名,後面按照字母順序羅列兩個表名或者表名的縮寫。
關聯表用於保存多對多關系。
如果被關聯的表名大於10個字母,必須將原來的表名的進行縮寫。如果沒有其他原因,建議都使用縮寫。
舉例:表Object與自身存在多對多的關系,則保存多對多關系的表命名為:R_Object;
表 Depart和Employee;存在多對多的關系;則關聯表命名為R_Dept_Emp
2. 屬性(列)的命名
1) 採用有意義的列名,表內的列要針對鍵採用一整套設計規則。每一個表都將有一個自動ID作為主健,邏輯上的主健作為第一組候選主健來定義,如果是資料庫自動生成的編碼,統一命名為:ID;如果是自定義的邏輯上的編碼則用縮寫加「ID」的方法命名。如果鍵是數字類型,你可以用_NO 作為後綴;如果是字元類型則可以採用_CODE 後綴。對列名應該採用標準的前綴和後綴。
舉例:銷售訂單的編號欄位命名:Sal_Ord_ID;如果還存在一個資料庫生成的自動編號,則命名為:ID。
2) 所有的屬性加上有關類型的後綴,注意,如果還需要其它的後綴,都放在類型後綴之前。
注: 數據類型是文本的欄位,類型後綴TX可以不寫。有些類型比較明顯的欄位,可以不寫類型後綴。
3) 採用前綴命名
給每個表的列名都採用統一的前綴,那麼在編寫SQL表達式的時候會得到大大的簡化。這樣做也確實有缺點,比如破壞了自動表連接工具的作用,後者把公共列名同某些資料庫聯系起來。
3. 視圖的命名
1) 視圖以V作為前綴,其他命名規則和表的命名類似;
2) 命名應盡量體現各視圖的功能。
4. 觸發器的命名
觸發器以TR作為前綴,觸發器名為相應的表名加上後綴,Insert觸發器加'_I',Delete觸發器加'_D',Update觸發器加'_U',如:TR_Customer_I,TR_Customer_D,TR_Customer_U。
5. 存儲過程名
存儲過程應以'UP_'開頭,和系統的存儲過程區分,後續部分主要以動賓形式構成,並用下劃線分割各個組成部分。如增加代理商的帳戶的存儲過程為'UP_Ins_Agent_Account'。
6. 變數名
變數名採用小寫,若屬於片語形式,用下劃線分隔每個單詞,如@my_err_no。
7. 命名中其他注意事項
1) 以上命名都不得超過30個字元的系統限制。變數名的長度限制為29(不包括標識字元@)。
2) 數據對象、變數的命名都採用英文字元,禁止使用中文命名。絕對不要在對象名的字元之間留空格。
3) 小心保留詞,要保證你的欄位名沒有和保留詞、資料庫系統或者常用訪問方法沖突
5) 保持欄位名和類型的一致性,在命名欄位並為其指定數據類型的時候一定要保證一致性。假如數據類型在一個表裡是整數,那在另一個表裡可就別變成字元型了。

⑹ MYSQL與SQL的區別

1.根本的區別是它們遵循的基本原則
二者所遵循的基本原則是它們的主要區別:開放vs保守。SQL伺服器的狹隘的,保守的存儲引擎與MySQL伺服器的可擴展,開放的存儲引擎絕然不同。雖然你可以使用SQL伺服器的Sybase引擎,但MySQL能夠提供更多種的選擇,如MyISAM, Heap, InnoDB, and Berkeley DB。MySQL不完全支持陌生的關鍵詞,所以它比SQL伺服器要少一些相關的資料庫。同時,MySQL也缺乏一些存儲程序的功能,比如MyISAM引擎聯支持交換功能。
2.性能:先進的MySQL
純粹就性能而言,MySQL是相當出色的,因為它包含一個預設桌面格式MyISAM。MyISAM 資料庫與磁碟非常地兼容而不佔用過多的CPU和內存。MySQL可以運行於Windows系統而不會發生沖突,在UNIX或類似UNIX系統上運行則更好。你還可以通過使用64位處理器來獲取額外的一些性能。因為MySQL在內部里很多時候都使用64位的整數處理。Yahoo!商業網站就使用MySQL作為後台資料庫。

當提及軟體的性能,SQL伺服器的穩定性要比它的競爭對手強很多。但是,這些特性也要付出代價的。比如,必須增加額外復雜操作,磁碟存儲,內存損耗等等。如果你的硬體和軟體不能充分支持SQL伺服器,我建議你最好選擇其他如DBMS資料庫,因為這樣你會得到更好的結果。
3.發行費用:MySQL不全是免費,但很便宜
當提及發行的費用,這兩個產品採用兩種絕然不同的決策。對於SQL伺服器,獲取一個免費的開發費用最常的方式是購買微軟的Office或者Visual Studio的費用。但是,如果你想用於商業產品的開發,你必須還要購買SQL Server Standard Edition。學校或非贏利的企業可以不考慮這一附加的費用。
4.安全功能

MySQL有一個用於改變數據的二進制日誌。因為它是二進制,這一日誌能夠快速地從主機上復制數據到客戶機上。即使伺服器崩潰,這一二進制日誌也會保持完整,而且復制的部分也不會受到損壞。

在SQL伺服器中,你也可以記錄SQL的有關查詢,但這需要付出很高的代價。

安全性
這兩個產品都有自己完整的安全機制。只要你遵循這些安全機制,一般程序都不會出現什麼問題。這兩者都使用預設的IP埠,但是有時候很不幸,這些IP也會被一些黑客闖入。當然,你也可以自己設置這些IP埠。

恢復性:先進的SQL伺服器
恢復性也是MySQL的一個特點,這主要表現在MyISAM配置中。這種方式有它固有的缺欠,如果你不慎損壞資料庫,結果可能會導致所有的數據丟失。然而,對於SQL伺服器而言就表現得很穩鍵。SQL伺服器能夠時刻監測數據交換點並能夠把資料庫損壞的過程保存下來。
供你參考,祝你好運!!!

⑺ sql server的對象命名規則是什麼

自己搜索一下就是了,我給你一段:

為了提供完善的資料庫管理機制,SQL Server 設計了嚴格的命名規則。在創建或引用資料庫實體,如表、索引、約束等時,必須遵守SQL Server 的命名規則,否則有可能發生一些難以預料和檢查的錯誤。
本文將講述:標識符的分類和格式規定;資料庫對象的命名規定與使用原則。希望對您會有所幫助。
標識符分類
SQL Server的所有對象,包括伺服器、資料庫以及資料庫對象,如表、視圖、列、索引、觸發器、存儲過程、規則、默認值和約束等都可以有一個標識符。對絕大多數對象來說,標識符是必不可少的,但對某些對象如約束來說,是否規定標識符是可選的。對象的標識符一般在創建對象時定義,作為引用對象的工具使用。
例如下面的SQL語句:
Create table student
(
id int primary key,
name varchar(20)
)
這個例子創建了一個表格,表格的名字是一個標識符:student;表格中定義了兩列,列的名字分別是id,name,他們都是合法的標識符。這個例子還定義另外一個未命名的主鍵約束。
SQL Server一共定義了兩種類型的標識符:規則標識符(Regular identifier)和界定標識符(Delimited identifier)。
規則標識符
規則標識符嚴格遵守標識符有關格式的規定。所以在T-SQL語句中凡是規則標識符都不必使用界定符,如[]和『』,來進行界定。
如上述例子中使用的表名student 就是一個規則標識符,在student上不必添加界定符。
界定標識符
界定標識符是那些使用了如[]和『』等界定符號來進行位置限定的標識符,使用了界定標識符,既可以遵守標識符命名規則,也可以不遵守標識符命名規則。
Select * from [student] 是要從student 表格中查詢出所有的數據與
Select * from student 等效。
為什麼呢?因為在「[]」中的標識符遵守標識符命名規則,「[]」被忽略不計。
但如果是不遵守標識符命名規則的標識符,那麼在T-SQL語句中必須使用界定符號加以限定,如:
Select * from [my table]
Where [order]=10
在這個例子中,必須使用界定標識符,因為在from子句中的標識符my talbe中含有空格,而where子句中的標識符order 是系統保留字(在查詢分析器里「order」變藍色)。這兩個標識符都不遵守標識符命名規則,必須使用界定符,否則無法通過代碼編譯。
標識符格式
標識符格式的規定,其具體內容如下:
標識符的首字母必須是以下兩種情況之一:
所有在統一碼(Unicode)2.0標准規定的字元,包括26個英文字母a-z和A-Z,以及其他一些語言字元,如漢字。例如可以給一個表格命名為「學生基本情況」。下劃線「-」、「@」或「#」。
標識符首字母後的字元可以是:
所有在統一碼(Unicode)2.0標准規定的字元,包括26個英文字母a-z和A-Z,以及其他一些語言字元,如漢字。下劃線「-」、「@」、「$」或「#」。
0,1,2,3,4,5,6,7,8,9。
標識符不允許是T-SQL的保留字。
由於T-SQL不區分大小寫,所以無論是保留字的大寫還是小寫都不允許使用。
標識符內部不允許有空格或特殊字元。
Select * from stu[de]nt –編譯器將返回錯誤信息。因為在標識符stu[de]nt中包含了特殊字元「[」和「]」,所以在編譯上述語句時出錯。
?
以某些特殊符號開頭的標識符在SQL Server系統中具有特定的含義。如「@」開頭的標識符表示這是一個局部變數或是一個函數的參數;以「#」開頭的標識符表示這是一個臨時表或存儲過程;一個以「##」開頭的標識符表示這是一個全局的臨時資料庫對象。T-SQL的全局變數以標志「@@」開頭。為避免同這些全局變數混淆,建議不要使用「@@」作為標識符的開始。
無論是界定標識符還是規則標識符都最多隻能容納128個字元,對於本地的臨時表最多可以有116個字元。
對象命名規則
SQL Server 2000 的資料庫對象名字由1-128個字元組成,不區分大小寫。在一個資料庫中創建了一個資料庫對象後,資料庫對象的全名應該由伺服器名、資料庫名、擁有者名和對象名這四個部分組成,格式如下:
[[[server.][database].][owner_name].]object_name 命名必須都要符合標識符的規定。
在實際引用對象時,可以省略其中某部分的名稱,只留下空白的位置。
實例的命名習慣
在SQL Server 2000中默認實例的名字採用計算機名,實例的名字一般由計算機名字和實例名字兩部分組成。
總之,正確掌握資料庫的命名和引用方式是用好SQL Server 2000的前提,也有助於用戶理解SQL Server 2000中的其他內容。

⑻ 兩位大類加6位流水號用SQL語句怎樣生成商品編碼

零售服裝商品標識代碼的編碼方法
服裝企業在為零售服裝產品編制商品條碼的代碼(以下簡稱「商品標識代碼」)時,應當遵循唯一性、無含義性和穩定性的原則。

1.唯一性

根據GB 12904《商品條碼》國家標準的強制性要求,商品名稱、商標、種類、規格、數量、包裝類型等基本特徵屬性有一項不同時,商品標識代碼就應當不同,這就是編制商品標識代碼所應當遵循的唯一性原則,俗稱「一品一碼」原則。

對於服裝產品來說,其基本特徵屬性一般包括品種、面料、款式、規格、顏色等。這些基本特徵屬性一旦確定,一般就可以確定唯一的「一款」服裝產品。下面舉例說明服裝企業如何按照唯一性原則編制零售商品標識代碼。

例如,某服裝企業申請了廠商識別代碼69290001。現在有一款新的產品要上市,按照表2-1之結構二,需要分配4位商品項目代碼,如0001,相應的校驗碼為2,則該款服裝產品的完整商品標識代碼為6929000100012。其後如有第二款產品上市時,應當分配另一個4位商品項目代碼,如0002,並得到另一個完整的商品標識代碼6929000100029。企業如果將商品項目代碼0000~9999這10000個號碼全部用完,再生產新產品時,就需要申請一個新的廠商識別代碼(如69290002)。此時,雖然後面的商品項目代碼(如0001)會和廠商識別代碼為69290001時的商品項目代碼重復,但由於廠商識別代碼不同,整個13位商品標識代碼也就不同,不會導致重碼。

唯一性原則是編制商品標識代碼所應當遵守的最基本原則,也是最重要的一條原則。在商業POS自動結算系統中和服裝企業商品管理信息系統中,不同的商品是靠不同的代碼來區別的。假如把兩種不同的商品用同一代碼來標識,違反唯一性原則,會導致商品管理信息系統的混亂,給銷售商、消費者和服裝企業帶來經濟損失。當然,「唯一性」是相對的,如果一款新品中還有各種細小的差別(例如鈕扣的顏色、形狀不同),而服裝企業不需要考慮這種細小的差別對銷售、配送是否帶來影響,編制商品標識代碼時就可以對這些細小的差別不予考慮,對存在細小差別的服裝產品賦予相同的標識代碼。有時,對一些產品管理比較簡單的服裝企業來說,可能不需要統計同一小類產品的局部款式、規格、顏色的差別對產品的銷售、配送是否有影響,則可以將僅在這些方面存在差別的產品認為是一款產品,賦予相同的商品標識代碼。不過,商品標識代碼分配得越「籠統」,可以得到的服裝產品屬性信息也就越少,所以不同的企業應根據自己的商品管理需要確定產品的「相同」或「不同」,從而決定商品標識代碼的「相同」或「不同」。

需要特別注意的是,基本特徵屬性完全相同,但因在不同地區銷售而售價不同的兩批服裝產品,不應分配不同的商品標識代碼。例如,完全相同的襯衫,在一個城市售價為100元,而同時在另一個城市售價為80元,但它們在出廠時應賦予相同的商品標識代碼。為了通過編碼與條碼符號對不同地區銷售的相同產品進行區分,可以採用本章第五節提到的附加屬性代碼及相應條碼符號來表示。

2.無含義性

商品條碼具有全球通用性,這就要求其代碼長度不能隨意。EAN/UCC-13代碼只能由13位數字組成。在我國,一個服裝企業申請一個前綴碼為692或693的廠商識別代碼最多隻能編制10000款服裝產品。因此,為了不浪費代碼資源,企業編制服裝商品標識代碼時一般只能採取無含義編碼,而且通常採用流水號編碼,也就是「有一款新品編一個代碼」。

用上述13位商品標識代碼標識一款服裝產品,是為了給該款產品一個全球唯一的關鍵字,所有關於該產品各種屬性信息的描述全部依靠計算機資料庫系統進行管理。

3.穩定性

一款服裝產品被賦予一個商品標識代碼後,如果產品本身沒有變化,就不能改變其商品標識代碼。即使售價發生變化,也只能改變銷售管理信息系統的產品價格,而不能改變商品標識代碼。但是下列情況下需要改變商品標識代碼:

l 產品的新變體取代了原產品;

l 產品的輕微變化對銷售的影響比較明顯,企業需要考慮這種影響。

另外,由於服裝產品的更新換代非常快,所以對於不再生產的產品,其商品標識代碼可以在適當時候賦給新的產品,以節省代碼資源。一般在一款服裝產品停產2年半後可以把相應的商品標識代碼重新賦給新的產品。總之,在不影響產品信息管理、不導致市場混亂的前提下,服裝企業應及時啟用停產產品的商品標識代碼,以盡量節省代碼資源。

服裝商品標識代碼編碼的唯一性、無含義性和穩定性是三個非常重要的原則。服裝企業在編制商品標識代碼時,必須遵守這三個原則,科學、規范地進行編碼,充分發揮商品條碼的作用。

採用商品條碼來標識服裝產品,企業往往擔心編碼容量不夠用。其實,這種擔心是不必要的。只要採用無含義編碼,現有的商品條碼系統成員至少有10000個號碼可以使用(前綴碼為692、693)。而且服裝產品生命周期短,往往一款產品經過一兩年就不再生產了,停產後兩三年該標識代碼就可以賦給別的產品。即使少數企業的產品眾多,10000個代碼容量確實不夠用,中國物品編碼中心還允許系統成員根據需要申請多個廠商識別代碼,每增加一個廠商識別代碼就意味著給企業增加了10000個代碼容量。針對個別大型服裝企業,中國物品編碼中心還可以提供專門的編碼容量解決方案。

服裝產品的基本特徵屬性繁多,商品標識代碼數量普遍比較大,一般至少達數百個,多的達幾萬甚至幾十萬個。這些代碼信息一旦出現混亂,可能給服裝企業的產品管理造成嚴重影響。因此企業必須十分重視商品標識代碼的賦碼管理工作,實行專人管理,盡量採用計算機自動賦碼和編碼信息管理,確保編碼信息的安全有序。