Mysql ANSI-SPARC实用说明
我不断听到和看到人们提到ANSI-SPARC,我们甚至在考试列表中有这样一个问题。外部的,概念的,内部的层次和东西。我已经把它填塞进去了,但当我真的试图理解它的时候,感觉就像是为了让书更厚而写的废话。有人能通过一个真实的例子来澄清ANSI-SPARC的概念吗。假设我们有一个MySQL服务器。每个级别上到底发生了什么 这是很久以前提出的标准。它有许多好的想法,并编纂了一些现有的最佳做法。它从未真正被作为标准采用,但它影响了现代数据库系统的设计。如果你不得不把它归结为一句话,最重要的想法是数据库用户应该从数据存储的实际细节中抽象出来:当然,没有用户应该知道物理位存储在哪里或如何存储,但是也可以使用自定义视图,这些视图只为客户端提供应该允许其查看的数据Mysql ANSI-SPARC实用说明,mysql,ansi-sparc,Mysql,Ansi Sparc,我不断听到和看到人们提到ANSI-SPARC,我们甚至在考试列表中有这样一个问题。外部的,概念的,内部的层次和东西。我已经把它填塞进去了,但当我真的试图理解它的时候,感觉就像是为了让书更厚而写的废话。有人能通过一个真实的例子来澄清ANSI-SPARC的概念吗。假设我们有一个MySQL服务器。每个级别上到底发生了什么 这是很久以前提出的标准。它有许多好的想法,并编纂了一些现有的最佳做法。它从未真正被作为标准采用,但它影响了现代数据库系统的设计。如果你不得不把它归结为一句话,最重要的想法是数据库用户
非常好。这是很久以前提出的标准。它有许多好的想法,并编纂了一些现有的最佳做法。它从未真正被作为标准采用,但它影响了现代数据库系统的设计。如果你不得不把它归结为一句话,最重要的想法是数据库用户应该从数据存储的实际细节中抽象出来:当然,没有用户应该知道物理位存储在哪里或如何存储,但是也可以使用自定义视图,这些视图只为客户端提供应该允许其查看的数据
数据库管理系统非常好。数据库管理系统保持了数据库的财务和逻辑独立性。 为了保持逻辑独立性,我们使用视图。视图是rational表中信息的表示。 在机场我们有一张桌子。在那里,我们有帕萨格的id、姓名、航班号和座位号
create table passengers ( nif varchar(200), name varchar(200),
num_flight varchar(200), num_seat varchar(200) );
create view passengers_external_view as select * from passengers;
如果我们将表格分为两部分,id名称和飞行座位号
我们只需要修改数据库中的视图,并且
不需要修改程序
create table passengers ( nif varchar(200), name varchar(200) )
create table flight_passengers ( nif varchar(200), num_flight int,
num_flight varchar(200), num_seat varchar(200) );
create view passengers_external_view as
select p.*, fp.num_flight, fp.num_seat
from passengers p
left outer join flight_passengers fp
on fp.nif = p.nif ;
数据库管理系统是保持数据库的财务和逻辑独立性的系统。 为了保持逻辑独立性,我们使用视图。视图是rational表中信息的表示。 在机场我们有一张桌子。在那里,我们有帕萨格的id、姓名、航班号和座位号
create table passengers ( nif varchar(200), name varchar(200),
num_flight varchar(200), num_seat varchar(200) );
create view passengers_external_view as select * from passengers;
如果我们将表格分为两部分,id名称和飞行座位号
我们只需要修改数据库中的视图,并且
不需要修改程序
create table passengers ( nif varchar(200), name varchar(200) )
create table flight_passengers ( nif varchar(200), num_flight int,
num_flight varchar(200), num_seat varchar(200) );
create view passengers_external_view as
select p.*, fp.num_flight, fp.num_seat
from passengers p
left outer join flight_passengers fp
on fp.nif = p.nif ;
以下是ANSI-SPARC三个级别的说明: 外部数据级 在关系模型中,外部模式还将数据表示为一组关系。外部模式根据概念级别指定数据视图。它是根据特定类别用户的需求定制的。某些用户不应看到存储数据的某些部分,并开始实现某种级别的安全性,简化这些用户的视图 示例: 学生不应该看到教师的工资。 教员不得查看账单或付款数据。 可以从存储的数据中派生的信息可能会被视为是存储的 未存储GPA,需要时计算。 应用程序是根据外部模式编写的。外部视图在访问时计算。它没有被存储。可以为不同类别的用户提供不同的外部模式。从外部级别到概念级别的转换由DBMS在运行时自动完成。可以在不更改应用程序的情况下更改概念架构: 必须更改从外部到概念的映射。 称为概念数据独立性。 概念数据级 也称为逻辑级别 隐藏物理级别的详细信息。 在关系模型中,概念模式将数据表示为一组表。 DBMS自动将概念模式与物理模式之间的数据访问映射 可以在不更改应用程序的情况下更改物理架构: DBMS必须将映射从概念更改为物理。 称为物理数据独立性。 物理数据级 物理模式描述了数据存储方式的详细信息:随机访问磁盘系统上的文件、索引等。它还通常描述文件的记录布局和文件类型哈希、b树、平面。 早期的应用程序是在这个级别上工作的——显式地处理细节。例如,最小化相关数据之间的物理距离,并在文件块记录、块链接列表等中组织数据结构。 问题: 例程是硬编码的,用于处理物理表示 很难对数据结构进行更改。 应用程序代码变得复杂,因为它必须处理细节。 快速实现新功能非常困难。 以下是一个例子: p> 更改后,客户表被拆分为两个表,但外部视图显示相同的字段:
create table customers ( id int, name varchar(200) );
create table customers_adresses ( id int, id_client int,
adress_type varchar(10), adress varchar(200) );
create view customers_external_view as
select c.*, ca2.adress as email, ca1.adress as fax
from customers c
left outer join customers_adresses ca1
on ca.adress_type = 'fax' and ca.id_client = c.id
left outer join customers_adresses ca2
on ca.adress_type = 'email' and ca.id_client = c.id ;
以下是ANSI-SPARC三个级别的说明: 外部数据级 在关系模型中,外部模式还将数据表示为一组关系。外部模式根据概念级别指定数据视图。它是根据特定类别用户的需求定制的。某些用户不应看到存储数据的某些部分,并开始实现某种级别的安全性,简化这些用户的视图 示例: 学生不应该看到教师的工资。 教员不得查看账单或付款数据。 可以从存储的数据中派生的信息可能会被视为是存储的 未存储GPA,需要时计算。 应用程序是根据外部模式编写的。外部视图在访问时计算。它没有被存储。可以为不同类别的用户提供不同的外部模式。从外部级别到概念级别的转换由DBMS在运行时自动完成。可以在不更改应用程序的情况下更改概念架构: 必须更改从外部到概念的映射。 称为概念数据独立性。 概念数据级 也称为逻辑级别 隐藏物理级别的详细信息。 在关系模型中,概念模式将数据表示为一组表。 DBMS自动将概念模式与物理模式之间的数据访问映射 可以在不更改应用程序的情况下更改物理架构: DBMS必须将映射从概念更改为物理。 称为物理数据独立性。 物理数据级 物理模式描述了数据存储方式的详细信息:随机访问磁盘系统上的文件、索引等。它还通常描述文件的记录布局和文件类型哈希、b树、平面。 早期的应用程序是在这个级别上工作的——显式地处理细节。例如,最小化相关数据之间的物理距离,并在文件块记录、块链接列表等中组织数据结构。 问题: 例程是硬编码的,用于处理物理表示 很难对数据结构进行更改。 应用程序代码变得复杂,因为它必须处理细节。 快速实现新功能非常困难。 以下是一个例子:
Sample of keep logical independence through database dessign changes:
Before the change a single table of customers with email and fax:
create table customers ( id int, name varchar(200),
email varchar(200), fax varchar(200) );
create view customers_external_view as select * from customers;
更改后,客户表被拆分为两个表,但外部视图显示相同的字段:
create table customers ( id int, name varchar(200) );
create table customers_adresses ( id int, id_client int,
adress_type varchar(10), adress varchar(200) );
create view customers_external_view as
select c.*, ca2.adress as email, ca1.adress as fax
from customers c
left outer join customers_adresses ca1
on ca.adress_type = 'fax' and ca.id_client = c.id
left outer join customers_adresses ca2
on ca.adress_type = 'email' and ca.id_client = c.id ;
你可以把它看作是某种银行经理,因此,你需要一个连接到你的DBMS的应用程序 首先,你的雇主负责管理客户数据库债务、收入、交易。。。还有一些人想查看他们的银行账户,因此,根据ANSI-SPARC的三个级别的体系结构,外部级别,雇主必须能够访问视图管理软件,如您的客户ATM,以便将他们重定向到下一个级别,名为概念级别,在那里他们控制和管理他们的个人数据 例如: 此客户表包含数据货币、名称、余额:
create table customers( nif varchar(200), name varchar(5000),
balance numeric(15,2) );
create view customers_external_view as select * from customers;
现在,银行必须记录客户所做的每一笔交易,但客户仍然希望看到他们的货币:
create table customers( nif varchar(200), name varchar(5000) );
create table movements( nif varchar(200), moment datetime, import numeric(15,2) );
create view customers_external_view as
select c.nif, c.name, sum( m.import ) as balance
from customers c
left outer join movements m
on c.nif = m.nif
group by c.nif, c.name ;
现在,在此之前,数据被重新写入数据库,它位于ANSI-SPARC的最后一级,即内部级
你可以把它看作是某种银行经理,因此,你需要一个连接到你的DBMS的应用程序 首先,你的雇主负责管理客户数据库债务、收入、交易。。。还有一些人想查看他们的银行账户,因此,根据ANSI-SPARC的三个级别的体系结构,外部级别,雇主必须能够访问视图管理软件,如您的客户ATM,以便将他们重定向到下一个级别,名为概念级别,在那里他们控制和管理他们的个人数据 例如: 此客户表包含数据货币、名称、余额:
create table customers( nif varchar(200), name varchar(5000),
balance numeric(15,2) );
create view customers_external_view as select * from customers;
现在,银行必须记录客户所做的每一笔交易,但客户仍然希望看到他们的货币:
create table customers( nif varchar(200), name varchar(5000) );
create table movements( nif varchar(200), moment datetime, import numeric(15,2) );
create view customers_external_view as
select c.nif, c.name, sum( m.import ) as balance
from customers c
left outer join movements m
on c.nif = m.nif
group by c.nif, c.name ;
现在,在此之前,数据被重新写入数据库,它位于ANSI-SPARC的最后一级,即内部级