Chinaunix首页 | 论坛 | 博客
  • 博客访问: 223648
  • 博文数量: 31
  • 博客积分: 1427
  • 博客等级: 上尉
  • 技术积分: 409
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-04 15:21
文章分类

全部博文(31)

文章存档

2008年(31)

我的朋友

分类: Mysql/postgreSQL

2008-03-20 18:08:19

3 任务

 

       有四个任务需要在本章完成:

1.  建立一个数据库用户。

2.建立两个关系数据库,一个作为数据仓库,另外一个作为源数据库。

3.为数据仓库建立数据库表。

4.产生代理键。

每个任务将在独立的小节中说明。

建立一个数据库用户id

       第一步产生一个数据库用户,你可以用该帐户进行操作数据仓库和数据源。

在你开始前,确信你已经将本书随附的脚本文件放置在mysql的安装目录下面。例如,我的安装目录是C:\mysql,所以我将我的脚本文件放在C:\mysql\scripts目录中。

       我们开始将用root用户登陆mysql,请输入下面的命令:

C:\>mysql -uroot -p

你将被提示输入密码:

 Enter password: ********

输入密码后,将看到控制台的欢迎信息:

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6 to server version: 5.0.21-community-nt
 
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
mysql>

 

敲入密码后的这些信息是当一个root用户登陆mysql时典型的回应信息。列表1-1 所示的脚本create_user_id.sql产生一个用户id dwid 其密码是 pw

列表1-1: 创建dwid 用户 id

/*****************************************************************/                                                             */

/* create_user_id.sql                                            */

/*                                                               */

/*****************************************************************/

GRANT ALL ON *.* TO dwid@localhost IDENTIFIED BY 'pw';

/* end of script   

 

用下面的命令方式运行该脚本:

mysql> \. c:\mysql\scripts\create_user_id.sql

回车后,你将看到回应的信息:

Query OK, 0 rows affected (0.03 sec)

show grants命令,你可以确认用户iddwid 是否已经被成功创建,你应该在命令中包含你的mysql服务器名称:

mysql> show grants for dwid@localhost;

假如存在用户 dwid,你可以看到如下信息:

Grants for dwid@localhost
GRANT ALL PRIVILEGES ON *.* TO 'dwid'@'localhost' IDENTIFIED BY
      PASSWORD '*D821809F681A40A6E379B50D0463EFAE20BDD122'
1 row in set (0.00 sec)

注意 密码部分在你的显示屏上显示的方式将不同于上面的描述。

现在你需要退出mysq然后用dwid用户登陆,退出mysqlexit命令:

mysql> exit

为了以dwid身份登陆mysql,可以用下面的命令:

c:\>mysql -udwid -p

 

然后输入dwid的密码,记住,密码是pw

建立数据库

       有两个数据库需要建立,源数据(source)和数据仓库(dw)。Source数据库存储你的数据,也就是这些数据将成为你的数据仓库的源数据。Dw数据库是为了作为数据仓库建立的。

       可以用列表1-2中的create_databases.sql 脚本进行创建数据库。

列表 1.2: 建立 dw source 数据库

/*****************************************************************/

/*                                                               */

/* create_databases.sql                                          */

/*                                                               */

/*****************************************************************/

CREATE DATABASE dw

;

CREATE DATABASE source

;

运行create_databases.sql脚本的命令如下:

mysql> \. c:\mysql\scripts\create_databases.sql
 

在你的控制台界面上,你将看到:

Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)

 

你可以用show databases命令来确认上面的命令是否成功运行。 为了确认dw数据库被创建用下面命令:

mysql> show databases like 'dw';

 

回应信息将如下面所示:

+---------------+
| Database (dw) |
+---------------+
| dw            |
+---------------+
1 row in set (0.00 sec)

 

为了确认source数据库被成功创建用下面命令:

mysql> show databases like 'source';
 

 

回应信息将如下面所示:

+-------------------+
| Database (source) |
+-------------------+
| source            |
+-------------------+
1 row in set (0.00 sec)
 
创建数据仓库表
     第二步是在dw数据库中创建数据仓库表。你可以用列表1-3所示的create_dw_tables.sql脚本来创建图1-1中的sales_order_fact表和四个维表。

列表1-3:创建数据仓库表

/*****************************************************************/

/*                                                               */

/* create_dw_tables.sql                                          */

/*                                                               */

/*****************************************************************/

/* default to dw database                                        */

 

USE dw;

 

/* creating customer_dim table                                   */

 

CREATE TABLE customer_dim

( customer_sk INT NOT NULL AUTO_INCREMENT PRIMARY KEY

, customer_number INT

, customer_name CHAR (50)

, customer_street_address CHAR (50)

, customer_zip_code INT (5)

, customer_city CHAR (30)

, customer_state CHAR (2)

, effective_date DATE

, expiry_date DATE )

;

 

/* creating product_dim table                                    */

CREATE TABLE product_dim

( product_sk INT NOT NULL AUTO_INCREMENT PRIMARY KEY

, product_code INT

, product_name CHAR (30)

, product_category CHAR (30)

, effective_date DATE

, expiry_date DATE )

;

 

/* creating order_dim table                                      */

CREATE TABLE order_dim

( order_sk INT NOT NULL AUTO_INCREMENT PRIMARY KEY

, order_number INT

, effective_date DATE

, expiry_date DATE )

;

 

/* creating date_dim table                                       */

CREATE TABLE date_dim

( date_sk INT NOT NULL AUTO_INCREMENT PRIMARY KEY

, date DATE

, month_name CHAR (9)

, month INT (1)

, quarter INT (1)

, year INT (4)

, effective_date DATE

, expiry_date DATE )

;

 

/* creating sales_order_fact_table                               */

CREATE TABLE sales_order_fact

( order_sk INT

, customer_sk INT

, product_sk INT

, order_date_sk INT

, order_amount DECIMAL (10, 2) )

;

 
现在运行create_dw_tables.sql脚本:
mysql> \. c:\mysql\scripts\create_dw_tables.sql
你的控制台将显示如下类似的信息:
Database changed
Query OK, 0 rows affected (0.13 sec)
 
Query OK, 0 rows affected (0.12 sec)
 
Query OK, 0 rows affected (0.12 sec)
 
Query OK, 0 rows affected (0.10 sec)
 
Query OK, 0 rows affected (0.11 sec)
 
你可以用show create table命令确认某个表是否被创建成功,例如,为了验证customer_dim表是否创建成功,用这个命令:
mysql> show create table customer_dim \G
在你的控制台界面上,将可以看到:
*************************** 1. row ***************************
       Table: customer_dim
Create Table: CREATE TABLE 'customer_dim' (
  'customer_sk' int(11) NOT NULL auto_increment,
  'customer_number' int(11) default NULL,
  'customer_name' char (50) default NULL,
  'customer_street_address' char (50) default NULL,
  'customer_zip_code' int (5) default NULL,
  'customer_city' char (30) default NULL,
  'customer_state' char (2) default NULL,
  'effective_date' date default NULL,
  'expiry_date' date default NULL,
  PRIMARY KEY ('customer_sk')
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
 
用相同的方式,可以确认其他表是否成功创建。
 
产生代理键
     本节的最后一个任务是用列表1-4所示的customer_sk.sql脚本创建代理键,这个脚本将向customer_dim表插入3条记录。 

列表 1-4: 产生 客户代理键值

/******************************************************************/

/*                                                                */

/* customer_sk.sql                                                */

/*                                                                */

/******************************************************************/

/* default to dw                                                  */

 

USE dw;

 

INSERT INTO customer_dim

( customer_sk

, customer_number

, customer_name

, customer_street_address

, customer_zip_code

, customer_city

, customer_state

, effective_date

, expiry_date )

VALUES

  (NULL, 1, 'Big Customers', '7500 Louise Dr.', '17050',

       'Mechanicsburg', 'PA', CURRENT_DATE, '9999-12-31')

, (NULL, 2, 'Small Stores', '2500 Woodland St.', '17055',

       'Pittsburgh', 'PA', CURRENT_DATE, '9999-12-31')

, (NULL, 3, 'Medium Retailers', '1111 Ritter Rd.', '17055'

       'Pittsburgh', 'PA', CURRENT_DATE, '9999-12-31')

;

 

/* end of script                                            */

 
运行customer_sk.sql脚本之前,你必须将你的mysql时间设置为:2007-02-01,这是因为customer_sk.sql脚本中的CURRENT_DATE函数用操作系统的时间作为载入effective_date字段的值,而我就是在这个时间运行customer_sk.sql脚本的。你可以通过将mysql运行的机器的系统的时间修改为特定的值来修改mysql时间。
      注意要牢记,这里你改变mysql的时间只是为了能比较平滑结合这个学习教程,实际的生产环境中,你不能在运行脚本的前后改变你的数据库或者系统的时间。事实上,你应该在数据库仓库环境中安排部署你的各个脚本定期的运行。
如何定期安排将在第8节“定期载入”中讨论。
     注意你的mysql监控端将在系统时间被修改后断开和mysql服务端的连接,为了确保你运行脚本不会有什么问题,在调整时间后,试着运行一下诸如“use dw”的简单的命令,你将得到一个错误的信息提示,但是你的监控端将重新连接上mysql。你可以再次运行“use dw”命令来确定已经连接上myslq服务器,这次,你不会再得到任何错误提示了。
        现在,你已经将mysql的时间调整到2007-02-01,可以用如下的命令运行列表1-4中所示的脚本,
        mysql> \. c:\mysql\scripts\customer_sk.sql
你将在你的控制台上看到如下信息:
Database changed
Query OK, 3 rows affected (0.06 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
查询该表,你可以看到这个脚本已经准确的插入代理键值了。

mysql> select * from customer_dim \G

*************************** 1. row ***************************

            customer_sk: 1

        customer_number: 1

          customer_name: Big Customers

customer_street_address: 7500 Louise Dr.

      customer_zip_code: 17050

          customer_city: Mechanicsburg

         customer_state: PA

         effective_date: 2007-02-01

            expiry_date: 9999-12-31

*************************** 2. row ***************************

            customer_sk: 2

        customer_number: 2

          customer_name: Small Stores

customer_street_address: 2500 Woodland St.

      customer_zip_code: 17055

          customer_city: Pittsburgh

         customer_state: PA

         effective_date: 2007-02-01

            expiry_date: 9999-12-31

*************************** 3. row ***************************

            customer_sk: 3

        customer_number: 3

          customer_name: Medium Retailers

customer_street_address: 1111 Ritter Rd.

      customer_zip_code: 17055

          customer_city: Pittsburgh

         customer_state: PA

         effective_date: 2007-02-01

            expiry_date: 9999-12-31

3 rows in set (0.00 sec)

 

mysql>

 

现在运行列表1-5中的脚本more_customer_sk.sq来增加更多的行。

 

列表 1-5: 插入更多客户资料

/*****************************************************************/

/*                                                               */

/* more_customer_sk.sql                                          */

/*                                                               */

/*****************************************************************/

USE dw;

 

INSERT INTO customer_dim (

  customer_sk

, customer_number

, customer_name

, customer_street_address

, customer_zip_code

, customer_city

, customer_state

, effective_date

, expiry_date

)

VALUES

  (NULL, 4, 'Good Companies', '9500 Scott St.', '17050',

       'Mechanicsburg', 'PA', CURRENT_DATE, '9999-12-31')

, (NULL, 5, 'Wonderful Shops', '3333 Rossmoyne Rd.', '17050',

      'Mechanicsburg', 'PA', CURRENT_DATE, '9999-12-31')

, (NULL, 6, 'Loyal Clients', '7070 Ritter Rd.', '17055',

       'Pittsburgh', 'PA', CURRENT_DATE, '9999-12-31')

;

 
下面说明如何运行more_customer_sk.sql 脚本
mysql> \. c:\mysql\scripts\more_customer_sk.sql
 
你将看到:
Database changed
Query OK, 3 rows affected (0.06 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
如果你查询customer_dim表,将发现有6条记录在该表中:
mysql> select * from customer_dim \G
*************************** 1. row ***************************
            customer_sk: 1
        customer_number: 1
          customer_name: Big Customers
customer_street_address: 7500 Louise Dr.
      customer_zip_code: 17050
          customer_city: Mechanicsburg
         customer_state: PA
         effective_date: 2007-02-01
            expiry_date: 9999-12-31
*************************** 2. row ***************************
            customer_sk: 2
        customer_number: 2
          customer_name: Small Stores
customer_street_address: 2500 Woodland St.
      customer_zip_code: 17055
          customer_city: Pittsburgh
         customer_state: PA
         effective_date: 2007-02-01
            expiry_date: 9999-12-31
*************************** 3 row ***************************
            customer_sk: 3
        customer_number: 3
          customer_name: Medium Retailers
customer_street_address: 1111 Ritter Rd.
      customer_zip_code: 17055
          customer_city: Pittsburgh
         customer_state: PA
         effective_date: 2007-02-01
            expiry_date: 9999-12-31
*************************** 4. row ***************************
            customer_sk: 4
        customer_number: 4
          customer_name: Good Companies
customer_street_address: 9500 Scott St.
      customer_zip_code: 17050
          customer_city: Mechanicsburg
         customer_state: PA
         effective_date: 2007-02-01
            expiry_date: 9999-12-31
*************************** 5. row ***************************
            customer_sk: 5
        customer_number: 5
          customer_name: Wonderful Shops
customer_street_address: 3333 Rossmoyne Rd.
      customer_zip_code: 17050
          customer_city: Mechanicsburg
         customer_state: PA
         effective_date: 2007-02-01
            expiry_date: 9999-12-31
*************************** 6. row ***************************
            customer_sk: 6
        customer_number: 6
          customer_name: Loyal Clients
customer_street_address: 7070 Ritter Rd.
      customer_zip_code: 17055
          customer_city: Pittsburgh
         customer_state: PA
         effective_date: 2007-02-01
            expiry_date: 9999-12-31
6 rows in set (0.01 sec)
不要删除这些客户记录,在下个章节中,你将用到它们。
 
4节 小结
       这一个节,你学习了星型模式和代理键。你还建立两个数据库以及操作这两个数据库的mysql用户。下面的章节,你将使用和扩展这些数据库。
阅读(5097) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~