1. 程式人生 > >聯合主鍵和資料庫中的三種表

聯合主鍵和資料庫中的三種表

在一張表中建立兩個主鍵
建立聯合主鍵有兩種方法
1.建立主鍵有兩種方法:一種是在資料庫提供的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

2、建立聯合主鍵的例子(很好的例子)
聯合主鍵用於欄位中內容都可重複的表
如公司部門人員表,裡面包含部門名,職工姓名等欄位, 每個部門中的人無重名,部門間可能有重名,如果設部門名為主鍵,則部門裡有不止一個人,部門名有重複,如果設姓名為主鍵,則部門間人員可能有重名,也不唯一。
將部門名和職工姓名一起設為主鍵,這兩個欄位加起來不可能重複

3、聯合主鍵的好處
聯合主鍵的好處是不需要因為需要主鍵而增加一個無用的主鍵列 例如如果不用聯合主鍵你必須增加個列ID設定主鍵 但這個ID列無任何作用
至於在什麼情況下使用,就像剛才舉例的,當你這個表的主鍵ID無任何用處,那麼就用聯合主鍵好了,你可以節約一個列的空間,但如果這表的ID列要做為別的表的外來鍵的話,就不能用聯合主鍵了。


4、建立資料庫表的原則是
必須遵循:1)表的欄位越少越好
       2)、表的數目越少越好
       3)、表的關係越簡單越好
       4)、表的低階冗餘是不允許的,但允許表的高階冗餘
                                       
6、我個人覺得建立主鍵的由來都是因為減少資料的冗餘而設立的。哈哈只是個人認為而已。
7、基本表、中間表和臨時表(三種表)
-1)、基本表相信大家都知道,就是儲存不能再分割的基本資訊的表
-2)、臨時表:SQL Server 支援臨時表。臨時表就是那些名稱以井號 (#) 開頭的表。如果當用戶斷開連線時沒有除去臨時表,SQL Server 將自動除去臨時表。臨時表不儲存在當前資料庫內,而是儲存在系統資料庫 tempdb 內。
臨時表有兩種型別:
本地臨時表:本地臨時表的名稱以單個數字元號 (#) 打頭;它們僅對當前的使用者連線是可見的;當用戶從 Microsoft SQL Server 2000 例項斷開連線時被刪除。
全域性臨時表:全域性臨時表的名稱以數學符號 (##) 打頭,建立後對任何使用者都是可見的。如果在建立全域性臨時表的連線斷開前沒有顯式地除去這些表,那麼只要所有其它任務停止引用它們,這些表即被除去。當建立全域性臨時表的連線斷開後,新的任務不能再引用它們。當前的語句一執行完,任務與表之間的關聯即被除去;因此通常情況下,只要建立全域性臨時表的連線斷開,全域性臨時表即被除去。
例如,如果建立名為 employees 的表,則任何人只要在資料庫中有使用該表的安全許可權就可以使用該表,除非它已刪除。如果建立名為 #employees 的本地臨時表,只有您能對該表執行操作且在斷開連線時該表刪除。如果建立名為 ##employees 的全域性臨時表,資料表中的任何使用者均可對該表執行操作。如果該表在您建立後沒有其他使用者使用,則當您斷開連線時該表刪除。如果該表在您建立後有其他使用者使用,則 SQL Server在所有使用者斷開連線後刪除該表。
現在,臨時表的許多傳統用途可由具有 table 資料型別的變數替換。
相關連結:
http://1632004.blog.163.com/blog/static/29991497201123110435805/

3)、中間表則為在兩張n:m的表中通過中間的表來建立起來關係,所以出現中間表(個人理解)

相關推薦

聯合資料庫

在一張表中建立兩個主鍵 建立聯合主鍵有兩種方法 1.建立主鍵有兩種方法:一種是在資料庫提供的GUI環境中建立,另一種是通過SQL語句執行建立,下面分別介紹。 1).在資料庫提供的GUI環境中建立(以SQL7為例)。 輸入表資訊後按Ctrl鍵同時選中多行,然後點上面的主鍵按鈕

PK資料庫 聯合自增

主鍵:主鍵是用來幹嘛的?一般來說是為了建立唯一標識,建立索引的。 主鍵的使用目的: a.為了保證資料查詢唯一; b.提高儲存效率和索引效率。 索引:如果表的讀操作少或者沒有,索引效率會高,如果表的寫操作較多或者大量,建立索引會慢。 主鍵的設定方法有3種: 一種是設定自增長主鍵

Mybatis+Mysql插入數據庫返回自增id值的方法

文章 param mysql int sta source nbsp 通用 映射 一、場景: 插入數據庫的值需要立即得到返回的主鍵id進行下一步程序操作 二、解決方法: 第一種:使用通用mapper的插入方法 Mapper.insertSelective(r

3.聯合複合

聯合主鍵 複合主鍵其實“主鍵是唯一的索引”這話有點歧義的。舉個例子,我們在表中建立了一個ID欄位,自動增長,並設為主鍵,這個是沒有問題的,因為“主鍵是唯一的索引”,ID自動增長保證了唯一性,所以可以。此時,我們再建立一個欄位name,型別為varchar,也設定為主鍵,你會發

MySQL資料庫外來的操作

在MySQL資料庫中,一般會涉及到主鍵和外來鍵,在上一個表中添加了主鍵之後,通常在下一個表中要新增外來鍵,但是添加了外來鍵之後,在實體類和資料庫中在加上上一個表的主鍵會比較好,這樣兩個表關聯之後,在上一個表查詢完成之後,將查詢是出來的欄位拿著去下一個庫裡查詢,會比較好。 select * fro

SQL資料庫 一些常使用的約束 排序 系統函式的用法 與聯合

--常用的約束create table bbsReply(Rcontents varchar(30) check(len(Rcontents)>6),--規定長度大於6Ttime datetime default(getdate()),TlastReply datet

Hibernate註解對映聯合主要方式

聯合主鍵用Hibernate註解對映方式主要有三種: 第一、將聯合主鍵的欄位單獨放在一個類中,該類需要實現java.io.Serializable介面並重寫equals和hascode,再將該類註解為@Embeddable,最後在主類中(該類不包含聯合主鍵類中的欄位)儲存

資料庫設計是設計聯合還是唯一索引+單一好?

在一個表中user_id和type兩個欄位唯一確定一條記錄,那麼在設計中是將這兩個欄位設計為聯合主鍵呢,還是建立一個邏輯主鍵id,而將這兩個欄位設計為唯一索引呢?這兩種方式有什麼區別?哪個更好呢?具體還

Oracle唯一索引的區別oracle聯合的作用

 在建立主鍵的同時會生成對應的唯一索引,主鍵在保證資料唯一性的同時不允許為空, 而唯一索引可以有一個為空的資料項,一個表中只能有一個主鍵,但是一個主鍵可以有多個欄位,一個表中可以有多個唯一索引。 聯合主鍵只是讓記錄聯合的那幾個欄位總體上是唯一的,比如id1 id2 id3三

MySQL的查詢約束語句聯合、外來

查詢語句 過濾空值 過濾空值 如果該值是空的 就當做0來處理 SELECT IFNULL(欄位名,0) FROM 表名 聚合函式 排序 利用ORD

SQL Server(MySql)聯合聯合索引) 索引分析

判斷 reat 系統 lap creat insert 結果 問題 select 最近有人問到這個問題,之前也一直沒有深究聯合索引具體使用邏輯,查閱多篇文章,並經過測試,得出一些結論 測試環境:SQL Server 2008 R2 測試結果與MySql聯合索引查詢機制類似,

ASP.NET C#訪問資料庫方式顯示資料

第一種方式:使用DataReader從資料庫中每次提取一條資料,用迴圈遍歷表                下面是我寫的一個例子:  &nbs

函式儲存過程聯合

建立批量插入資料 第一個命令是DELIMITER //,它與儲存過程語法無關。 DELIMITER語句將標準分隔符 - 分號(;)更改為://。 在這種情況下,分隔符從分號(;)更改為雙斜槓//。為什麼我們必須更改分隔符? 因為我們想將儲存過程作為整體傳遞給伺服器,而不是讓mysql工具一次解釋每個語句。

Linux環境下實現MariaDB資料庫備份還原

一、tar工具的使用  1、備份 (1)停止服務,3306埠關閉 (2)看下配置檔案有沒有關鍵日誌存放於其它目錄的,檢查/etc/my.cnf,再檢查下/etc/my.cnf.d/下有沒有配置檔案放置其他地方,有的話也需要一起拷貝歸檔 (3)建立備份目錄,歸檔 (4)開啟服

談IO的阻塞非阻塞,同步非同步及IO模型

什麼是同步和非同步?        燒水,我們都是通過熱水壺來燒水的。在很久之前,科技還沒有這麼發達的時候,如果我們要燒水,需要把水壺放到火爐上,我們通過觀察水壺內的水的沸騰程度來判斷水有沒有燒開。隨著科技的發展,現在市面上的水壺都有了提醒功能,當我們把水壺插電

從一個審批需求看資料庫設計——聯合的使用

最近工作挺忙,已經接近996了,所以部落格更新也少了。今天忙裡偷閒,分享一個最近遇到的一個數據庫設計問題。業務需求是: 針對一條人員資訊的資料進行審批操作 在進行審批時要看到審批前後資料的修改 同一人員的審批資料只能存在一條 審批通過後

[轉]邏輯聯合,一定要討論清楚!

今天在做專案的資料庫設計時,突然發現自己在表的主鍵設定方面太過片面,對於邏輯主鍵和聯合主鍵的理解也很少。索性上網百度了一下,看到了一些論壇中的兄弟們的討論,其中很多的分析讓我頓時清醒了很多。下面開始貼上一些人的觀點和分析,如果原作者看到本文,發現有不妥之處,請郵件告之。   網友goldrain說: 我倒不反

Hibernate學習筆記()----ID生成策略、聯合

一、ID生成策略(參考hibernate_0400_ID) 1)xml生成id使用generator屬性          <idname="id" >          <generatorclass="native"></generator

資料庫多個聯合

建立某表,需要兩個主鍵(INST_ID,INST_RESP_CODE) CREATE TABLE CODE_CONVERTER_20170806 ( INST_ID CHARACTER(4) NO

js事件繫結之間的關係事件處理函式裡的this值

<!DOCTYPE HTML> <html > <head>     <meta charset="UTF-8"> </head> <body> <div id="b" onclick="cons