1. 程式人生 > >三種主要的關系型表設計

三種主要的關系型表設計

arch 部門 int body charset font 提前 mys 將他

多表關系主要可以分三種:

1.一對一關系

2.多對一關系(如:員工與部門)

3.多對多關系(如:老師與學生)

在mysql中建立這樣的關系型多表的一般方案如下:

一、一對一關系

可以建立一個主表和一個副表,將數據量多的作為主表,其有自己id號作為主鍵,並有副表的id做為外鍵,

也可以直接將他們設計成一個表。

二、多對一關系

各建立一張表,多的表加上外鍵約束,建標語句如下:

CREATE TABLE department(
id varchar(30) PRIMARY KEY,
name varchar(30)
);

CREATE TABLE employee(
id varchar(30),
name 
varchar(30), salary double, department_id varchar(30), PRIMARY KEY(id), CONSTRAINT department_id_FK FOREIGN KEY(department_id) REFERENCES department(id) ON DELETE SET NULL );

三、多對多關系

在建立兩張基本信息表的同時,建立一個中間表,這個中間表通過兩個鍵值來表達兩個表的數據關系,見表語句如下:

CREATE TABLE teacher(
id varchar(30) PRIMARY KEY,
name varchar(30),
salary 
double ); CREATE TABLE student( id varchar(30) PRIMARY KEY, name varchar(30) ); CREATE TABLE teacher_student ( teacher_id varchar(30) NOT NULL DEFAULT "", student_id varchar(30) NOT NULL DEFAULT "", PRIMARY KEY (teacher_id,student_id), CONSTRAINT student_id_FK FOREIGN KEY (student_id) REFERENCES
student (id) ON DELETE CASCADE, CONSTRAINT teacher_id_FK FOREIGN KEY (teacher_id) REFERENCES teacher (id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

四、總結

  表中行的信息是通過id來標識的,多表的關系總是通過建立一個各個表的id映射來表達,這個映射表有時比較簡單,就把它包含到其要映射的一個表中(如多對一關系表),而比較復雜時就單獨提取出來(如多對多關系表),當然也可以不提取出來,但是那樣設計會產生很多冗余空間,占用我們硬盤。

  但是我們要查詢這些表時,將映射表提取出來的設計在這個時候就明顯不如不提取出來的設計,因為多表查詢總是比單表查詢更耗費時間,所以為了節約查詢時的成本我們有時候會把多表合並設計,其實就是提前求出了多表的笛卡兒積。

  把表分開節約空間,把表合並節約時間,所以具體表該怎麽設計還是要看需求。

三種主要的關系型表設計