Ví dụ về việc Inserting, Indexing và truy vấn cơ sở dữ liệu

Một phần của tài liệu Khóa luận tốt nghiệp Toán tin: Tìm hiểu lý thuyết về cơ sở dữ liệu không gian tích hợp trong Oracle 8i (Trang 34 - 40)

ROWID CODE |MAXCODE .GROUPCODE | META

2. Làm một thí nghiệm

2.2. Ví dụ về việc Inserting, Indexing và truy vấn cơ sở dữ liệu

spatial.

Phần nay sẽ đưa ra một vi dụ đơn giản về tao bảng trong

không gian, chèn dữ liệu và tạo ra các chỉ mục index trong không

gian và thực thi các câu lệnh truy van dữ liệu. Vi dụ này dựa vảo

bối cảnh lấy ví dụ về nhà máy sản xuất nước uống có gas để họ có thể xác định nơi nào về mặt địa lý có hứng thú với các sản pham của họ (nước uống cola). Vi dụ này có thể biểu diễn bat kỳ điều kiện nào người sử dụng đặt ra ví dụ : Nơi nào cola có thị phan nhiều nhất, nơi nào đang phải chịu áp lực từ đối thủ, v .vwv..

Mỗi vùng như vậy có thể là một thành phó, tỉnh thành, hoặc là một đất nước.

Ví dụ này sẽ thực hiện các công việc sau:

© Tao bảng COLA_MARKETS để chứa dữ liệu không gian.

Trang 31

© Chèn vào bảng 4 nơi hứng thú việc uống cola đó là vùng

cola_a, cola b, cola_c, cola_ d.

o Cập nhật USER_ SDO GEOM METADATA view để phản

ảnh kích thước của những phân vùng.

© Tạo chỉ mục không gian (COLA_SPATIAL_IDX).

o Thực thi một vài câu lệnh truy van csdi không gian.

Ví dụ:

Tạo bang COLA_MARKETS

CREATE TABLE cola_markets (

mkt_id NUMBER PRIMARY KEY, --> là khóa chính va có kiểu số name VARCHAR2(32), --> có kiểu varchar2

shape MDSYS.SDO_GEOMETRY); --> có kiểu

MDSYS.SDO_GEOMETRY

Chèn vào bảng 4 phân vùng cola_a, cola_b, cola_c và cola_d

INSERT INTO cola_markets VALUES(

1, --> giá trị của mkt_id

'cola_a', ~> giá trị của name

MDSYS.SDO_GEOMETRY(--> giá trị của shape

2003, --> giá trị cho biết là đây là đa giác 2 chiều

NULL,

NULL,

MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 3), -- hinh chữ

nhật (1003 = mặt ngoài)

Trang 32

MDSYS.SDO_ORDINATE_ARRAY(1, 1, 5, 7) ) — chỉ cần khai

báo 2 tọa độ là dưới trái và trên phải.

}

INSERT INTO cola_markets VALUES(

2, ơ> giỏ trị của mkt_id

'cola _b', --> giá trị của name

MDSYS.SDO_GEOMETRY(--> giá trị của shape

2003, —> giá trị cho biết là đây là đa giác 2 chiều

NULL, --> SRID

NULL, --> SDO_POINT

MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 1), -- 1 da giác (vòng đa giác mat ngoài)

MDSYS.SDO_ORDINATE_ARRAY(5, 1. 8, 1, 8, 6, 5, 7, 5, 1) --

> tọa độ

))

INSERT INTO cola_markets VALUES(

3,

‘cola_c’,

MDSYS.SDO_GEOMETRY(

2003, -- 2-dimensional polygon NULL,

NULL,

MDSYS.SDO_ELEM_INFO_ARRAY‘(1, 1003, 1),

MDSYS.SDO_ORDINATE_ARRAY(3, 3, 6, 3, 6, 5, 4, 5, 3, 3)

) );

Trang 33

INSERT INTO cola_markets VALUES(

4,

'cola_ đ,

MDSYS.SDO_GEOMETRY(

2003, — 2-dimensional polygon NULL,

NULL,

MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 4), ---> hình tròn MDSYS.SDO_ORDINATE_ARRAY(8, 7, 10, 9, 8, 11) --> tọa độ

Cập nhật USER_SDO_GEOM_METADATA view dé phan anh

kích thước của những phan vùng

INSERT INTO USER_SDO_GEOM_METADATA VALUES (

‘cola_markets’,

shape’,

MDSYS.SDO DIM ARRAY( --> lưới 20x20, tolerance gan bang 0

MDSYS.SDO_DIM_ELEMENT('X’, 0, 20, 0.005), MDSYS.SDO_DIM_ELEMENT('Y’, 0, 20, 0.005)

),

NULL -- SRID

):

--> Việc cập nhật nay là cần thiết trước khi tao chỉ mục không

gian.

Trang 34

Tạo chỉ mục không gian (COLA_SPATIAL_IDX)

CREATE INDEX cola_spatial_idx ON cola_markets(shape)

INDEXTYPE IS MDSYS.SPATIAL_INDEX PARAMETERS(SDO_LEVEL = 8’);

Thực thi một vai câu lệnh truy van csdl không gian

— Trả về kết quả là đường giao giữa 2 đường cola_a và cola_c.

SELECT SDO_GEOM.SDO_INTERSECTION(c_a shape,

m.diminfo, c_c.shape, m.diminfo)

FROM cola_markets ca, cola_markets gó,

user_sdo_geom_metadata m

WHERE mtabe name = 'COLA MARKETS' AND m.column_name = 'SHAPE'

AND c_a.name = 'cola_a’ AND c_c.name = 'cola_c'.

-- Giữa 2 vùng cola_b và cola_d có mối quan hệ nao trong không

gian?

SELECT SDO_GEOM.RELATE(c_b.shape, m.diminfo,

‘anyinteract’,

c_d.shape, m.diminfo)

FROM cola_markets c_b, cola_markets c_d,

user_sdo_geom_metadata m

WHERE m.table name = ‘'COLA_MARKETS' AND m.column_name = 'SHAPE'

AND c_b.name = 'cola_b' AND c_d.name = 'cola_d’;

Trang 35

~ Trả vẻ tên của tắt cả các thị phần nước giải khát cola.

SELECT c.name, SDO_ GEOM.SDO_AREA(c.shape, m.diminfo) FROM cola_markets c, user_sdo_geom_metadata m

WHERE mtabe name = ‘COLA_MARKETS' AND

m.column_ name = 'SHAPE:

-- Trả về tên của thị phần cola _a.

SELECT c.name, SDO_GEOM.SDO_AREA(c.shape, m.diminfo)

FROM cola_markets c, user_sdo_geom_metadata m

WHERE mtable name = ‘COLA_MARKETS' AND

m.column_ name = 'SHAPE' AND c name = 'cola_a;

~ Trả về khỏang cách giữa 2 vùng.

SELECT SDO GEOMSDO DISTANCE(c b.shape, m.diminfo,

c_d.shape, m.diminfo)

FROM cola_markets c_b, cola_markets c_d,

user_sdo_geom_metadata m

WHERE mtable name = ‘COLA_MARKETS' AND

m.column_name = 'SHAPE'

AND c_b.name = 'cola b' AND c_d.name = ‘cola_d’;

Trang 36

Kiểm tra tinh hợp lệ của 1 vùng.

SELECT c.name, SDO_GEOM.VALIDATE_ GEOMETRY(c.shape, m.diminfo)

FROM cola_markets c, user_sdo_geom_metadata m

WHERE mtable name = ‘COLA _MARKETS' AND m.column_name = 'SHAPE'

AND c.name = 'cola_c’;

-- Kiểm tra hợp lệ của cột shape (tao bang dé lưu dữ liệu result)

CREATE TABLE validation results (mkt_id number, result

varchar2(10));

EXECUTE SDO_GEOM.VALIDATE_LAYER(COLA_MARKETS',

‘SHAPE’, 'MKT_ ID,

'VALIDATION_RESULTS');

SELECT * from validation_results;

Một phần của tài liệu Khóa luận tốt nghiệp Toán tin: Tìm hiểu lý thuyết về cơ sở dữ liệu không gian tích hợp trong Oracle 8i (Trang 34 - 40)

Tải bản đầy đủ (PDF)

(40 trang)