我一直听到并且看到人们提到ANSI-SPARC,我们甚至在考试清单中有这样的问题。外部,概念,内部层面和东西。我已经塞满了它,但是当我真正尝试理解它时,它只是感觉像是“等等等等”,这是为了让书更厚。有人可以通过现实生活中的例子来阐明ANSI-SPARC概念。让我们说我们有一个MySQL服务器。每个级别究竟发生了什么?
答案 0 :(得分:2)
DBMS是保持数据库的fisic和逻辑独立性的人。 为了保持逻辑独立性,我们使用视图。视图是理性表中信息的表示。 例如:在机场,我们有一张桌子。在那里,我们有通行证的名称,姓名,飞行号码和座位号码。
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-name和fly-seat number) 我们只需要修改数据库中的视图,就可以了 无需修改程序。
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 ;
答案 1 :(得分:1)
这些是 ANSI-SPARC 三个级别的描述: 外部数据级别
在关系模型中,外部模式还将数据表示为一组关系。外部模式根据概念级别指定数据视图。它是根据特定类别用户的需求量身定制的。某些用户不应该看到部分存储数据,并开始实现一定程度的安全性并简化这些用户的视图
<强>实施例强>:
可以从存储的数据中获取的信息可能被视为已存储。
应用程序是根据外部架构编写的。访问时计算外部视图。它没有存储。可以向不同类别的用户提供不同的外部模式。从外部级别到概念级别的转换由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;
更改后,客户表分为2个表,但外部视图显示相同的字段:
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 ;
答案 2 :(得分:1)
你可以看到它就像你是某种银行经理一样,所以,你需要一个连接到你的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的最后一级。
答案 3 :(得分:0)
这是很久以前提出的标准。它有许多好的想法,并编纂了一些现有的最佳实践。它从未真正被用作标准,但它影响了现代数据库系统的设计方式。如果你必须将它提炼成一个句子,最重要的想法是数据库的用户应该从数据存储的实际细节中抽象出来:当然,没有用户应该知道物理位的存储位置和方式,此外,还提供自定义视图,仅向客户提供应允许其查看的数据。