日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库设计之E-R图和关系表

發布時間:2024/1/1 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库设计之E-R图和关系表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 概念

E-R:也稱實體-聯系圖(Entity Relationship Diagram),提供了表示實體類型、屬性和聯系的方法,用來描述現實世界的概念模型。

實體:用矩形框表示,矩形框內寫明實體名稱

實體屬性:用橢圓圖框或圓角矩形表示

關系:用菱形框表示實體之間的關系,在菱形框內寫明關系名,分別與有關實體連接起來,同時在實心線段旁標上關系的類型(1:1,1:N或M:N)

關系表:將E-R圖轉換成關系表,并定義列類型,建立主鍵、外鍵等各種約束。

二 E-R圖

下邊我們以大家最為熟悉的一個應用場景——學校系統(學生、課程、老師、學生證)為例,設計一個E-R圖,如下:

說明:

  • 圖中定義了4個實體和3個關系,實體分別是學生、學生證、老師和課程。
  • 實體的屬性如圖中各個橢圓所示。
  • 3組關系:學生與學生證的一對一入學關系(每個學生入學時,辦理唯一的學生證);課程與老師之間的一對多任教關系(此處為了便于說明1對多關系,假設學校只允許一個老師教一門課程,但一門課程可以有多個老師任教);課程與學生之間的多對多關系(每個課程可以有多個學生學習,每個學生可以選擇多門課程)。
  • ?三 關系表

    完成了E-R圖設計后,下邊就可以設計關系表了,如下步驟:

  • 數據庫選型,常用的數據庫MySQL,SQL Server,Oracle等。各種數據庫支持的字段類型略有不同,所以在物理表設計之前要完成數據庫選型。下邊我們以開源數據庫MySQL為例,進行建表。
  • 將每個實體轉換成一個數據表,將實體的屬性轉換為該表中的列,為每個列定義相應的數據類型。
  • 對于1:1關系的兩個表,給兩個表設置相同的主鍵列。
  • 對于1:N關系的兩個表,在N表中添加一個外鍵列,該列與1標的主鍵相關聯。
  • 對于M:N關系,生成一個單獨的表表示該關系,該關系的列由兩個表的主鍵組成。
  • 重新審核所有的表,在需要的地方添加約束,對常用的條件字段設置索引。
  • 通過以上步驟,可以將E-R圖中的實體關系模型轉換成具體的關系表。該圖一共生成了5個表:4個實體表和1個關系表。

    課程表

    表名:t_course

    表的作用:定義實體課程

    列名

    類型

    索引、約束

    作用及備注

    id

    INT

    PK

    唯一標識

    title

    TEXT

    NOT NULL

    課程名

    period

    INT

    Index

    學時

    description

    TEXT

    課程描述

    老師表

    表名:t_teacher

    表的作用:定義實體老師

    列名

    類型

    索引、約束

    作用及備注

    id

    INT

    PK

    唯一標識

    name

    TEXT

    NOT NULL

    姓名

    gender

    BOOL

    Index

    性別

    True:男

    False:女

    address

    TEXT

    住址

    course_id

    INT

    FK:t_course.id

    由于1:N關系添加的外鍵

    學生表

    表名:t_student

    表的作用:定義實體學生

    列名

    類型

    索引、約束

    作用及備注

    student_id

    INT

    PK

    唯一標識

    name

    TEXT

    NOT NULL

    姓名

    age

    INT

    Index

    年齡

    parent

    TEXT

    家長

    學生證表

    表名:t_card

    表的作用:定義實體學生證

    列名

    類型

    索引、約束

    作用及備注

    student_id

    INT

    PK

    學號,唯一標識

    start_from

    datetime

    注冊日期、入學日期

    end_to

    datetime

    學生證有效期截止日期

    學生課程關系表

    表名:t_enroll

    表的作用:定義關系學生:課程

    列名

    類型

    索引、約束

    作用及備注

    student_id

    INT

    PK,FK:t_student.student_id

    學生標識

    course_id

    INT

    PK,FK:t_course.id

    課程標識

    說明:

    Index:索引,是對數據庫表中一列或多列的值進行排序的一種結構。對常用的查詢條件字段添加索引可以顯著提高SQL語句的性能。

    Constraint:約束,是對列數據取值的某種限定。常見的約束有主鍵、外鍵、非空、唯一等。

    PK:主鍵(Primary Key),唯一標識一條記錄,不允許為空。在大多數數據庫中主鍵列也是一個索引列。

    FK:外鍵(Foreign Key),是另一個表的主鍵,表示關聯關系,可以是空字段。

    NOT NULL:非空約束,表示不允許列值為空。

    四 SQL語句

    關系表設計好之后,創建表格的SQL語句,也就水到渠成了,下邊是以上5個關系表對應的建表mysql語句。注意mysql引擎使用的是InnoDB,字符集是utf-8。

    課程表

    //課程表 CREATE TABLE `t_course` (`id` int(11) NOT NULL,`title` text NOT NULL,`period` int(11) DEFAULT NULL,`description` text,PRIMARY KEY (`id`),KEY `idx_period` (`period`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    老師表

    //老師表 CREATE TABLE `t_teacher` (`id` int(11) NOT NULL,`name` text NOT NULL,`gender` int(11) DEFAULT NULL,`address` text,`course_id` int(11) DEFAULT NULL,PRIMARY KEY (`id`),KEY `gender` (`gender`),KEY `course_id` (`course_id`),CONSTRAINT `course_id` FOREIGN KEY (`course_id`) REFERENCES `t_course` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    學生表

    //學生表 CREATE TABLE `t_student` (`student_id` int(11) NOT NULL,`name` text NOT NULL,`age` int(11) DEFAULT NULL,`parent` text,PRIMARY KEY (`student_id`),KEY `age` (`age`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    學生證表

    //學生證表 CREATE TABLE `t_card` (`student_id` int(11) NOT NULL,`start_from` datetime DEFAULT NULL,`end_to` datetime DEFAULT NULL,PRIMARY KEY (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    學生課程關系表

    //學生:課程關系表 CREATE TABLE `t_enroll` (`student_id` int(11) NOT NULL,`course_id` int(11) NOT NULL,PRIMARY KEY (`student_id`,`course_id`),CONSTRAINT `student_id` FOREIGN KEY (`student_id`) REFERENCES `t_student` (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    五?參考文獻

    《Python高效開發實戰》(劉長龍)

    總結

    以上是生活随笔為你收集整理的数据库设计之E-R图和关系表的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。