从简单词汇开始理解ERWin:Attribute, Entity, Logical Model, Physical Model, Domain, Cardinality

Categories: Development Notes; Tagged with: ; @ November 17th, 2008 23:04

1. Attribute : [普] 属性, 品质, 特征

Represents[表现,描绘] a type of characteristic or property with a set of real or abstract things(People, Places, Events and so on);
个人理解: Attribute对应着数据库中的Column, 对应OOP中的Propertie

2. Entity: [普] 实体

An Entity represents a set of real or abstract things(People, Places, Event and so on) that have common attributes or characteristics.
个人理解: Entity对应着数据库中的Table, 在OOP端, 则对应着一个Class.

3. Logic Model\Physical Model: [普] 逻辑模型\物理模型

由于数据库厂商实在太多, 如MS SQL, MySQL, DB2, Oracle等, 在DataType, SQL语句, 命名原则方面, 各有不同,
在设计数据库时也许要考虑到日后数据库的更换, 着眼于长远,我们需要设计一个与具体厂商无关的Model,, 这便是Logic Model.

同时又需要设计一个具体的Model, 这个Model直接与某个厂商某个数据库版本相适应, 这便是Physical Model

4. Domain, Cardinality

…待续…

SQL中的连接 Join In MySQL

Categories: Database; Tagged with: ; @ October 31st, 2008 23:18

Here is a summary of difference between inner join and outer join:

http://stackoverflow.com/questions/38549/sql-difference-between-inner-and-outer-join

A Visual Explanation of SQL Joins – by Coding Horror.

有两个表,如下:

mysql> SELECT * FROM Class;
+———-+——–+
| Class_ID | Name   |
+———-+——–+
|                1 | 2008A  |
|                2 | 2008B  |
|                3 | 2008C |
+———-+——–+
3 rows in set (0.00 sec)

mysql> SELECT * FROM Student;
+————+——-+———-+——— —-+
| Student_ID | Name  | Class_ID | Student_Age |
+————+——-+———-+——- ——+
|                    1 | Jack    |                 1 |           NULL |
|                   2 | Lucy     |                 0 |           NULL |
|                    3 | Join     |                1 |            NULL |
|                    4 | Tom   |                 2 |            NULL |
+————+——-+———-+————- +
4 rows in set (0.00 sec)

即: 有三个班级 分别为2008A, 2008B.,2008C 有4个学生 , 其中, Jack, Join为2008A班的学生,Tom为2008B班的学生, 而Lucy则不在任何班级中.

INNER JOIN:


mysql> SELECT * FROM Student s INNER JOIN Class c ON s.Class_ID = c.Class_ID;
+————+——+———-+————-+———-+——-+
| Student_ID | Name | Class_ID | Student_Age | Class_ID | Name  |
+————+——+———-+————-+———-+——-+
|          1 | jack |        1 |        NULL |        1 | 2008A |
|          3 | Join |        1 |        NULL |        1 | 2008A |
|          4 | Tom  |        2 |        NULL |        2 | 2008B |
+————+——+———-+————-+———-+——-+
3 rows in set (0.06 sec)

OUTER JOINs:

Left Outer Join:左外连接
mysql> SELECT * FROM Student s LEFT OUTER JOIN Class c ON s.Class_ID = c.Class_ID;
+————+——+———-+————-+———-+——-+
| Student_ID | Name | Class_ID | Student_Age | Class_ID | Name  |
+————+——+———-+————-+———-+——-+
|          1 | jack |        1 |        NULL |        1 | 2008A |
|          2 | Lucy |        0 |        NULL |     NULL | NULL  |
|          3 | Join |        1 |        NULL |        1 | 2008A |
|          4 | Tom  |        2 |        NULL |        2 | 2008B |
+————+——+———-+————-+———-+——-+
4 rows in set (0.00 sec)

Right Outer Join:右外连接
mysql> SELECT * FROM Student s RIGHT OUTER JOIN Class c ON s.Class_
+————+——+———-+————-+———-+——-+
| Student_ID | Name | Class_ID | Student_Age | Class_ID | Name  |
+————+——+———-+————-+———-+——-+
|          1 | jack |        1 |        NULL |        1 | 2008A |
|          3 | Join |        1 |        NULL |        1 | 2008A |
|          4 | Tom  |        2 |        NULL |        2 | 2008B |
|       NULL | NULL |     NULL |        NULL |        3 | 2008C |
+————+——+———-+————-+———-+——-+
4 rows in set (0.00 sec)

Full Outer Join:

MySql中常用SQL语句总结

Categories: Database; Tagged with: ; @ October 31st, 2008 22:51

使用工具: phpMyAdmin, MySQLBroswer, 命令提示行[Windows下须将mysql目录中的bin添加到环境变量PATH中].

1. 连接的建立与退出:

mysql –u root –p
或登陆后直接选定某数据库 mysql –u root –p [数据库名称]
输入密码即可建立连接;

输入quit或exit即可关闭连接.

2. 数据库[DataBase]的建立与删除:

mysql>CREATE DATABASE School;
mysql>DROP DATABASE School;

3. 表[Table]的增加, 修改与删除:

表的见
首先应选定某数据库:
mysql>use School;

表的建立

然后建立一个班级表Class, 包含有班级ID, 非空, 自增, 为该表的主键; 班级名称 varchar(255);
mysql>CREATE TABLE Classes (Class_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,Name VARCHAR(255));

新建一个学生表Student:

mysql>CREATE TABLE Student(Student_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,Name VARCHAR(255), Class_ID INT);

建立后的两表属性:
mysql> use school
Database changed
mysql> DESCRIBE Classes;
+———-+————–+——+—–+———+—————-+
| Field    | Type         | Null | Key | Default | Extra          |
+———-+————–+——+—–+———+—————-+
| Class_ID | int(11)      | NO   | PRI | NULL    | auto_increment |
| Name     | varchar(255) | YES  |     | NULL    |                |
+———-+————–+——+—–+———+—————-+
2 rows in set (0.02 sec)

mysql> DESCRIBE Student;
+————+————–+——+—–+———+—————-+
| Field      | Type         | Null | Key | Default | Extra          |
+————+————–+——+—–+———+—————-+
| Student_ID | int(11)      | NO   | PRI | NULL    | auto_increment |
| Name       | varchar(255) | YES  |     | NULL    |                |
| Class_ID   | int(11)      | YES  |     | NULL    |                |
+————+————–+——+—–+———+—————-+
3 rows in set (0.02 sec)

表的修改

表的重命名: 为了保持编码风格一致, 现在我们想把Classes表更名为Class.则须运行:

mysql> RENAME TABLE Classes To Class;
Query OK, 0 rows affected (0.00 sec)

除此之外,我们现在需要在Student加入一个名为Age的Column.属性为int 
mysql> ALTER TABLE Student ADD COLUMN Age int;
Query OK, 1 row affected (0.08 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> DESCRIBE Student;
+————+————–+——+—–+———+—————-+
| Field      | Type         | Null | Key | Default | Extra          |
+————+————–+——+—–+———+—————-+
| Student_ID | int(11)      | NO   | PRI | NULL    | auto_increment |
| Name       | varchar(255) | YES  |     | NULL    |                |
| Class_ID   | int(11)      | YES  |     | NULL    |                |
| Age        | int(11)      | YES  |     | NULL    |                |
+————+————–+——+—–+———+—————-+
4 rows in set (0.02 sec)

==>逆操作: mysql>ALTER TABLE Student Drop Age;

另外, 我们需要修改Student的Class_ID默认为0:

mysql> ALTER TABLE Student MODIFY Class_ID int DEFAULT 0;
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> DESCRIBE Student;
+————+————–+——+—–+———+—————-+
| Field      | Type         | Null | Key | Default | Extra          |
+————+————–+——+—–+———+—————-+
| Student_ID | int(11)      | NO   | PRI | NULL    | auto_increment |
| Name       | varchar(255) | YES  |     | NULL    |                |
| Class_ID   | int(11)      | YES  |     | 0       |                |
| Age        | int(11)      | YES  |     | NULL    |                |
+————+————–+——+—–+———+—————-+
4 rows in set (0.00 sec)

最后,总结下Column名称的修改:
mysql> ALTER TABLE Student CHANGE Age Student_Age int;
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> DESCRIBE Student;
+————-+————–+——+—–+———+—————-+
| Field       | Type         | Null | Key | Default | Extra          |
+————-+————–+——+—–+———+—————-+
| Student_ID  | int(11)      | NO   | PRI | NULL    | auto_increment |
| Name        | varchar(255) | YES  |     | NULL    |                |
| Class_ID    | int(11)      | YES  |     | 0       |                |
| Student_Age | int(11)      | YES  |     | NULL    |                |
+————-+————–+——+—–+———+—————-+
4 rows in set (0.01 sec)

Table的删除:

mysql>DROP TABLE Class;

4. 记录的插入,修改与删除

插入:

在Class与Student两表中插入记录: 如插入ID为1,名为"2008A"的班级, id为1,姓名为"Tom"所在班级ID为1的Student.
mysql> INSERT INTO Class(Class_ID, Name) VALUES(1, ‘2008A’);
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO Student(Student_ID, Name, Class_ID) VALUES (1, ‘Tom’, 1);
Query OK, 1 row affected (0.00 sec)

修改:

譬如该学生名字应为’Tomey”, 我们需要更正其数据库中的姓名,于是我们使用:

mysql> UPDATE Student set Name = ‘Tomey’ WHERE Student_ID = 1;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0

删除:
DELETE FROM Student WHERE Student_ID = 2;

Newer Posts



// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.