1. 程式人生 > >《資料庫系統概念》讀書筆記——概念、SQL、JDBC、ER、正規化等

《資料庫系統概念》讀書筆記——概念、SQL、JDBC、ER、正規化等

1、關係型資料庫

    列:欄位/屬性    行:元組/記錄

    關係:笛卡爾積中符合某種關係的元組(笛卡爾積是從兩個關係中合併元組)

    超碼是可以唯一標識元組的屬性組合,候選碼是最小的超碼,主碼是被選中的候選碼

2、SQL

    有char(n),varchar(n),int,smallint,numeric(p, d),float(n),date,time,timestamp,blob(二進位制字串),text(字元字串)等型別。

    char是定長字串,varchar不定長。

    int(11)中11表示顯示寬度,不影響int的大小(32位),當數值位數未達到顯示寬度時在前面補0。

    語法:(1)foreign key(user_id) references user(id);

    (2)自然連線:select t1.A, t2.B from t1 natural join t2;只考慮t1和t2在共同屬性上相同的元組,等價於select t1.A, t2.B from t1, t2 where t1.x = t2.x;可以用join ... using指定連線的欄位/屬性

   (3)like ... escape '\':模式匹配,%表示任意子串,_表示任意一個字元,escape可以定義轉義字元,例如like ‘ab\%cd%’escape '\'可以匹配所有以abcd開頭的字串

    (4)order by ... desc

    (5)元組相等:where (a1, a2) = (b1, b2)

    (6)集合運算:union,自動去重,全部保留的話可以用union all

    intersect(all) 交集,A∩B        except 差集,A-B

    (7)null    用is (not) null判斷是否為空,其他對null運算的結果視為unknown,如果所有屬性相等,有null元組也視為相等

    (8)聚集函式:avg,min,max,sum,count等,可以單獨使用也可以放在group by ... having ...裡的having後,忽略空值

    (9)巢狀子查詢:(not) in,some/all, (not) exists,unique等

    例如select ... where salary > some ( select ...)

    (10)外連線

    left outer join ... on ... 保留左邊的元組,如果右邊沒有和左邊對應的元組則為null;如果左邊一個元祖對應多個右邊的元組則全部保留,重複左邊的元組

    right outer join ... on ... 右外連線,保留右邊的元組

    full outer join ... on ... 全外連線,全部保留

    (11)alter table t add/drop/modify:修改表

    (12)select ... for update:加排他鎖,僅用於InnoDB事務塊中    

3、檢視

    create view v as ( select ...);

    並不預先計算,只是儲存定義,檢視隨表的變化而變化。檢視一般不允許修改,例如insert時,不在檢視中的列在表中就會為null,會產生問題。

4、完整性約束

    not null,unique,check (A>B),foreign key (user_id) references user(id)等

    外來鍵約束可以定義級聯刪除

5、JDBC連線資料庫

public static void main(String[] args) throws Exception {
        Connection conn = null;
        String sql;
        // MySQL的JDBC URL編寫方式:jdbc:mysql://主機名稱:連線埠/資料庫的名稱?引數=值
        // 避免中文亂碼要指定useUnicode和characterEncoding
        String url = "jdbc:mysql://localhost:3306/mydb?"
                + "user=root&password=123456&useUnicode=true&characterEncoding=UTF8";

        try {
            // 可以通過Class.forName把它載入進去,也可以通過初始化來驅動起來,下面三種形式都可以
            Class.forName("com.mysql.jdbc.Driver");
            // or:
            // com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();
            // or:
            // new com.mysql.jdbc.Driver();

            System.out.println("成功載入MySQL驅動程式");
            // 一個Connection代表一個數據庫連線
            conn = DriverManager.getConnection(url);
            // Statement裡面帶有很多方法,比如executeUpdate可以實現插入,更新和刪除等
            Statement stmt = conn.createStatement();
            sql = "create table student(NO char(20),name varchar(20),primary key(NO))";
            int result = stmt.executeUpdate(sql);// executeUpdate語句會返回一個受影響的行數,如果返回-1就沒有成功
            }
        } catch (SQLException e) {
            System.out.println("MySQL操作錯誤");
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            conn.close();
        }
    }

    可以使用PreparedStatement,防止sql注入,輸入的字串會被插入轉義字元

6、E-R圖,實體-聯絡圖

    

    長方形表示實體,橢圓表示屬性,菱形表示聯絡;1:n表示一對多,m:n表示多對多

7、正規化

    主屬性:候選碼中的屬性

    傳遞依賴:如果X→Y,Y→Z,且X不包含Y,Y!→X(Y不能決定X), (X∪Y)∩Z = ∅,則Z傳遞依賴於X

    1NF:屬性不可分

    2NF:完全依賴主鍵

    3NF:非主屬性欄位互不依賴(消除了非主屬性對主屬性的傳遞依賴)

    BCNF:消除了所有屬性對主屬性的傳遞依賴,如果表中有X→Y,則X一定是候選碼

相關推薦

資料庫系統概念讀書筆記——概念SQLJDBCER正規化

1、關係型資料庫     列:欄位/屬性    行:元組/記錄     關係:笛卡爾積中符合某種關係的元組(笛卡爾積是從兩個關係中合併元組)     超碼是可以唯一標識元組的屬性組合,候選碼是最小的超碼,主碼是被選中的候選碼 2、SQL     有char(n)

資料庫系統概念讀書筆記(1)——引言

資料庫管理系統:有一個互相關聯的資料的集合和一組用以訪問這些資料的程式組成,這個資料集合就叫做資料庫。上來就先寫上一個概念,作為這本書的主線。 1.資料庫的出現的必要性和對資料庫的要求 儘管檔案系統可以解決不少問題,但是下面的問題是檔案系統所無法解決的,如果給檔案系統加上這些

資料庫系統概念 讀書筆記(四)

SQL 支援資料型別: char(10):如果輸入字串為“Avi”,則該字串後追加七個空格十七達到10個字串的長度。 varchar(10):支援最大字串長度。如果輸入字串為“Avi”,則不會補充空

資料庫系統概論01-基本概念&特點& 三級模型結構&二級映像

從聯機事務處理(On-Line Transaction Processing,LOTP)到聯機分析處理(On-Line Analysis Processing,OLAP) 從一般企業管理到計算機輔助設計與製作(CAD/CAM)、計算機整合制造系統(CIMS)、電子政務(e-G

【作業系統概念 讀書筆記】第一章 導論

  作業系統(operating system)是管理計算機硬體的程式。為應用程式提供基礎,並且充當計算機使用者和計算機硬體的中介。 1.1作業系統的功能 硬體hardware:中央處理單元Central Processing Unit CPU、記憶體memory、輸入/

資料庫系統概論學習筆記(四):SQL的簡單應用之資料查詢

嗯……最實用的部分,其他都可以不會,唯獨這個必須熟練吧 —— 資料查詢 這篇筆記主要是例子,使用的例子是《筆記(三)》中定義的學生選課關係。使用的SQL語句可能與教材上有些出入,因為我使用的是MySQL 5.7,對SQL語言支援可能會有些許差異。

資料庫系統概論學習筆記(六):SQL的簡單應用之試檢視

資料邏輯獨立的一種解決方案 —— 檢視 “檢視”,可以視為關係資料庫模式結構中的外模式。其作用主要是: ①、簡化使用者的操作。DBA通過檢視,可以過濾掉與使用者無關的資訊,讓使用者更加專注於其工作的內容。 ②、使使用者能夠以多種角度看待同一資料。這一作

《深入理解計算機系統》——讀書筆記(一)

img 可執行 即將 簡單的 world std 加載 完整 .exe   這本書從一個簡單的C語言的HelloWorld程序講起...   這是這個小程序的生命周期的一個部分:   HellOWorld程序,從被創建(文本格式),到被執行(在屏幕上打印出來)。   其

《深入理解計算機系統讀書筆記(ch2)+ C 泛型

tex byte 指向 get 讀書筆記 class its n) 支持 本章主要介紹各類型的機器表示,Stanford的CS107的lec2和lec3有精彩解釋,比看書快(當作書中只是的cache吧)。 lec4中介紹的C裏面如何使用泛型(沒有template, refe

資料庫系統概論複習筆記

Abstract: 資料庫系統概論期末複習筆記 ~btw:歡迎關注 ~ Github: https://github.com/ScarlettYellow個人部落格:https://scarletthuang.cn/PART1 資料庫概述關係模型的構成:關係資料結構、關係操作

資料庫系統實現學習筆記二(資料庫關係建模)--by穆晨

前言         ER建模環節完成後,需求就被描述成了ER圖。之後,便可根據這個ER圖設計相應的關係表了。         但從ER圖到具體關係表的建立還需要經過兩個步驟: 邏輯模型設計:將ER圖對映為邏輯意義上的

讀書筆記-《Effective Java》第3條第4條: 強化Singleton屬性—私有構造器或者列舉型別

第3條:用私有構造器或者列舉型別強化Singleton屬性 把構造器私有這個是單例基本要求,本條介紹了一種不知道為啥沒有流行起來的單例方式(實現Singleton的最佳方式),包含單個元素的列舉型別(INSTANCE不是關鍵字,寫別的也行) package org.test; p

資料庫系統實現學習筆記三(更新異常與規範化設計)--by穆晨

前言         在前兩篇中,主要講了ER建模和關係建模。在具體分析如何用資料庫管理軟體RDBMS(Relational Database Management System)實現這些關係前,我想有必要思考下面這個問題:  

《深入淺出MySQL》讀書筆記五:SQL優化

一、SQL優化的一般步驟 show status like 'pattern%'; 檢視資料庫的執行時狀態 show variables like 'pattern%'; 檢視資料庫啟動時的配置資訊 1、首先需要定位執行效率有問題的SQL:     a、執行效率有

《深入淺出MySQL》 讀書筆記一:SQL基礎

一、SQL分類 1、create、drop、alter等,屬於 資料定義語言 2、insert、delete、update、select 屬於 資料操縱語句 3、grant等 定義訪問許可權和安全級別 屬於 資料控制語句 二、資料定義語句 mysql -uroot -p 輸入密

推薦系統實踐讀書筆記(一):好的推薦系統

設計一個推薦系統之前,一定要了解什麼樣的推薦系統才是好的推薦系統至關重要。那麼一個優秀的推薦系統具有哪些特徵呢?(量化或者概念性的特徵) 通過以下三個步驟回答一個優秀的推薦系統是什麼樣的 1)什麼是推薦系統、推薦系統的主要任務、推薦系統和分類目錄以及搜尋引擎的區別 2)不同領域分門別類的介紹

linux中proc檔案系統 -- ldd3讀書筆記

     1./proc 檔案系統概述      /proc 檔案系統是由軟體建立,被核心用來向外界報告資訊的一個檔案系統。/proc 下面的每一個檔案都和一個核心函式相關聯,當檔案的被讀取時,與之對應的核心函式用於產生檔案的內容。我們已經見到了很多這樣的檔案,例如,/pr

讀書筆記:實現string類的建構函式拷貝建構函式解構函式過載運算子=

#include <iostream> #include <cassert> #include <cstring> using namespace std; class MyString{ public: MyString(co

《深入理解計算機系統讀書筆記7--- 併發程式設計1

CSAPP介紹了三種併發程式設計技術:(1)程序(2)I/O多路複用(3)執行緒 還有對於多執行緒併發程式設計的一些問題的思考 本帖先介紹三種併發模型,下一貼介紹多執行緒併發注意事項。 (1)基於程序的併發程式設計 核心函式就是fork。用父程序不停接受socket連線,f

《深入理解計算機系統讀書筆記——第七章 連結

 連結 有兩個c檔案: /* main.c */ void swap(); int buf[2] = {1, 2}; int main() { swap(); return 0; } /* swap.c */ extern int buf[]; int *b