精华内容
下载资源
问答
  • 数据定义

    千次阅读 2018-04-06 23:27:18
    关系数据库系统支持三级模式结构,其模式、外模式和内模式的基本对象有模式、表、视图...在SQL语句中,模式定义语句为: CREATE SCHEMA <模式名>AUTHORIZATION<用户名>; 如果没有指定...

    关系数据库系统支持三级模式结构,其模式、外模式和内模式的基本对象有模式、表、视图和索引等。SQL数据定义功能包括模式的定义、表定义、视图定义和索引的定义。

    SQL的数据定义语句如下表
    数据定义表

    一、模式的定义和删除

    1、定义模式

    在SQL语句中,模式定义语句为:
    CREATE SCHEMA <模式名>AUTHORIZATION<用户名>;
    如果没有指定<模式名>,那么<模式名>隐含为<用户名>。该命令要拥有数据库管理员权限,或者获得了数据库管理员授予的CREATE SCHEMA的权限。
    定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,例如基本表、视图、索引等。用户可以在创建模式的同时在这个模式定义中进一步创建表、视图,
    定义授权:CREATE SCHEMA<模式名>AUTHORIZATION<用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>];

    2、删除模式

    在SQL语句中,删除模式语句为:
    DROP SCHEMA<模式名>< CASCADE|RESTRICT>;其中CASCADE(级联)和RESTRICT(限制)选一个。级联表示在删除模式的同事把该模式中所有的数据库对象全部删除;限制表示该模式中已经定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。
    备注:只有当该模式下没有任何下属的对象时才能执行DROP SCHEMA语句。

    二、基本表的定义、删除与修改

    1、定义基本表

    创建了一个模式就建立了一个数据库的命名空间,一个框架,首先要定义该模式包含的数据库基本表。SQL定义基本表格式:
    CREATE TABLE<表名>(<列名><数据类型>[列级完整性约束条件][,<列名><数据类型>[列级完整性约束条件]])…[,<表级完整性约束条件>]);
    建表的同时还可定义与该表有关的完整性约束条件,这些条件被存入系统的数据字典中,当用户操作表中数据时由关系数据库管理系统自动检查该操作是否违背这些完整性约束条件。如果条件涉及该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。

    2、数据类型

    关系模型中,每一个属性来自一个域,它的取值必须是域中的值。在SQL中域的概念用数据类型来实现,定义表的各个属性时需要指明其数据类型及长度,SQL标准支持多种数据类型,不同的关系数据库管理系统中支持的数据类型不完全相同。
    数据类型
    一个属性选用那种数据类型要根据实际情况(取值范围、适用运算)来决定。

    3、模式与表

    每一个基本表都属于某一个模式,一个模式包含多个基本表。当定义基本表时一般可以有三种方法定义它所属的模式:
    1)在表名中明显地给出模式名;
    2)在创建模式语句中同时创建表;
    3)设置所属的模式,这样在创建表时表名中不必给出模式名。
    当用户创建基本表时没有指定模式,系统根据搜索路径来确定该对象所属的模式。搜索路径语句:SHOW search_path
    当前默认值都是$user,PUBLIC,首先搜索与用户名相同的模式名,如果不存在就使用PUBLIC模式。

    4、修改基本表

    SQL语句:
    ALTER TABLE <表名>[ADD[COLUMN]<新列名><数据类型>[完整性约束]]
    [ADD<表级完整性约束>][DROP[COLUMN]<列名>[CASCADE|RESTRICT]]
    [DROP CONSTRAINT<完整性约束名>[RESTRICT|CASCADE ]]
    [ALTER COLUMN<列名><数据类型>];
    其中:ADD用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件。DROP COLUMN用于删除表中的列,CASCADE会自动删除引用了该列的其他对象,而RESTRICT如果该列被其他对象引用,RDBMS将被拒绝删除该列。DROP CONSTRAINT用于删除指定的完整性约束条件。

    5、删除基本表

    SQL语句为:
    DROP TABLE <表名>[RESTRICT|CASCADE];
    其中,使用RESTRICT删除的基本表不能被其他表的约束所引用,不能有视图、触发器、存储过程或者函数。如果存在这些依赖该表的对象,就无法删除。使用CASCADE相关的依赖对象也会一起删除。默认是RESTRICT。

    三、索引的建立与删除

    索引相当于目录,通过消耗“空间”来节约“时间“,从而提高效率。但是如果使用的空间过多也是不合理的,要注意时间和空间对效率的影响。
    索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
    索引是对数据库表中一个或多个列的值进行排序的结构。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。

    数据库索引有多种类型,常见索引包括:
    1、顺序文件上的索引
    针对指定实行升序或降序存储的关系,在该属性上建立一个顺序索引文件,索引文件由属性值和相应的元组指针组成。
    2、B+树索引
    将索引实行组织成B+树形式,树的叶结点为属性值和相应的元组指针。它具有动态平衡的优点。
    3、散列索引
    建立若干个桶,将索引属性按照其散列函数值映射到相应桶中,桶中存放索引属性值和相应的元组指针。它具有查找速度快的特点。
    4、位图索引
    用位向量记录索引属性中可能出出现的值,每个位向量对应一个可能值。
    索引的缺点是占用一定的存储空间,当基本表更新时,索引要进行相应的维护,这样会增加数据库的负担。

    索引是关系数据库管理系统的内部实现技术,属于内模式的范畴。

    1、建立索引

    SQL语句:
    CREATE [UNIQUE][CLUSTER] INDEX<索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>]]…);
    其中,索引可以建立在该表的一列或者多列上,各列名之间用逗号分隔,每个列名后面还可以用次序指定索引值的排列次序,可选ASC(升序)或DESC(降序),默认是ASC。UNIQUE表明此索引的每一个索引值只对应唯一的数据记录,CLUSTER表示要建立的索引是聚簇索引。

    2、修改索引

    SQL语句:
    ALTER INDEX <旧索引名> RENAME TO <新索引名>;实现重新命名。

    3、删除索引

    SQL语句为:
    DROP INDEX <索引名>;删除索引时,系统会同时从数据字典中删除有关该索引的描述。

    四、数据字典

    数据字典是关系数据库管理系统内部的一组系统表,记录数据库中所有的定义信息:关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、统计信息等。数据字典中的信息是查询优化和查询处理时的重要依据。

    展开全文
  • 数据模式(Schema)定义

    千次阅读 2016-10-25 09:58:27
    数据模式(Schema)定义 Created 星期一 24 十月 2016 模式(Schema)定义了一个多维数据库,它包一个含逻辑模型,并定义了逻辑模型到物理模型的映射。物理模型包含多维数据的存储方式:事实表、维表及其结构等。...

    数据模式(Schema)定义

    Created 星期一 24 十月 2016

    模式(Schema)定义了一个多维数据库,它包一个含逻辑模型,并定义了逻辑模型到物理模型的映射
    物理模型包含多维数据的存储方式:事实表、维表及其结构等。
    逻辑模型包含了用于MDX 查询的结构,如数据立方体、维度、层次、成员、度量等。
    Mondrian 使用一个XML 文件来描述模式。
    Mondrian 包含一个创建、修改模式文件的Java桌面应用schema-workbench

    模式文件

    Schema 文件可以定义虚拟立方体,基于一个或多个基础立方体来建立。也可以定义角色以及角色的访问权限(对立方体、维度等)。有关虚拟立方体和角色的内容本文档不涉及。
    Schema 文件主要结构如下(去掉了VirtualCube 和Role 等):
    Schema 包含立方体、虚拟立方体、共享维度、角色

    Cube 维度和度量的集合,以事实表为中心

    Table 事实表

    AggName 声明一个聚集表

    aggElements 聚集表设置,结构见下

    AggPattern 声明一批聚集表

    aggElements

    Dimension 维度

    Hierarchy 维度层次

    relation 物理表、视图,结构见下
    Closure/ 映射父子层次关系
    Level 一个层次

    DimensionUsage 引用共享维度
    Measure 度量

    CalculatedMemberProperty/

    CalculatedMember 计算成员
    NamedSet 命名集合

    Formula/ 公式

    UserDefinedFunction/ 声明用户自定义函数

    Relation 可以是Table、View、Inline Table、Join:
    aggElement 可以是以下元素:

    • AggExclude
    • AggFactCount
    • AggIgnoreColumn
    • AggForeignKey
    • AggMeasure
    • AggLevel

    示例:
    personDemo.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <Schema name="Mondrian"> <!--模型定义-->
    <Cube name="Person"> <!--立方体 ,一个立方体有多个维度-->

    <Table name="PERSON" /> <!--立方体对应的事实表 -->
    <Dimension name="部门" foreignKey="USERID" > <!--定义维度 -->

    <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有部门" > <!--定义维度下面的层次,层次包含很多层 -->
    <Table name="PERSON" alias="a"/> <!--定义维度获取数据的来源-维表 -->
    <Level name="部门" column="DEPARTMENT" uniqueMembers="true" /> <!--定义层次的层,每个层对应数据库中对应的字段 -->
    <Level name="姓名" column="USERNAME" uniqueMembers="true" />
    </Hierarchy>

    </Dimension>
    <Dimension name="性别" foreignKey="USERID" >

    <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有性别">

    <Table name="PERSON" alias="b" />

    <Level name="性别" column="SEX" uniqueMembers="true" />
    </Hierarchy>

    </Dimension>
    <Dimension name="专业技术资格类别" foreignKey="USERID" >

    <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有专业技术资格类别">

    <Table name="PERSON" alias="c" />

    <Level name="资格类别" column="ZYJSLB" uniqueMembers="true" />
    </Hierarchy>

    </Dimension>
    <Dimension name="专业技术资格等级" foreignKey="USERID" >

    <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有专业技术资格等级">

    <Table name="PERSON" alias="d" />

    <Level name="资格等级" column="ZYJSDJ" uniqueMembers="true" />
    </Hierarchy>

    </Dimension>
    <Dimension name="职系" foreignKey="USERID" >

    <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有职系">

    <Table name="PERSON" alias="e" />

    <Level name="职系" column="ZHIXI" uniqueMembers="true" />
    </Hierarchy>

    </Dimension>
    <Dimension name="民族" foreignKey="USERID" >

    <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有民族">

    <Table name="PERSON" alias="f" />

    <Level name="民族" column="NATIONALITY" uniqueMembers="true" />
    </Hierarchy>

    </Dimension>
    <Dimension name="学历" foreignKey="USERID" >

    <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有学历">

    <Table name="PERSON" alias="g" />

    <Level name="学历" column="XUELI" uniqueMembers="true" />
    </Hierarchy>

    </Dimension>
    <Measure name="人数" column="USERID" aggregator="distinct count" /> <!--指标/度量,采用distinct count聚合 -->
    </Cube>

    </Schema>

    度量

    每个度量都有一个名字,一个事实表的列,一个聚集器(aggregator)。聚集起通常为sum,但count,min,max,avg,distinct-count 都是可以的;

    • 可选的datatype 属性可以是String、Integer、Numeric、Boolean、Date、Time 以及Timestamp,默认是Numeric,除了是count 或distinct-count,,这两个默认是Integer。
    • 可选的formatString 属性指定怎样打印这个值。
    • 度量可以有一个caption(标题)属性以便Member.getCaption()方法返回它而不是返回名字。

    度量除了可以来自一个列,也可以使用一条SQL 表达式来计算。下面Promotion Sales 就是
    一个例子:
    <Measure name="Promotion Sales" aggregator="sum" formatString="#,###.00">

    <MeasureExpression>

    <SQL dialect="generic">

    (case when sales_fact_1997.promotion_id =0 then 0 else
    sales_fact_1997.store_sales end)

    </SQL>

    </MeasureExpression>

    </Measure>
    为了一致,度量被视为一个特别的维度的成员,这个维度叫做Measures

    缺省度量

    Cube(和VirtualCube)元素允许指定可选的属性defaultMeasure
    <Cube name="Sales" defaultMeasure="Unit Sales">
    ...

    维度,层次

     

    表映射

    Dimension 元素有一个foreignKey 属性,它是事实表的列名
    而Hierarchy 元素有一个primaryKey 属性
    如果一个层次有不止一个表,可以使用primaryKeyTable 属性来区分。
    Level 的column 定义了它的键,必须是这个层次所在表的列名。如果键是一个表达式,可以使用KeyExpression 元素子元素。
    Level 元素的uniqueMembers 属性用于优化SQL 生成。

    成员"ALL"
    <Hierarchy hasAll="true" ...allMemberName="..."

    多层次体系
    一个维度可以由多个层次组成:
    <Dimension name="Time" foreignKey="time_id">
    <Hierarchy hasAll="false" primaryKey="time_id">
    <Table name="time_by_day"/>
    <Level name="Year" column="the_year" type="Numeric" uniqueMembers="true"/>
    <Level name="Quarter" column="quarter" uniqueMembers="false"/>
    <Level name="Month" column="month_of_year" type="Numeric"
    uniqueMembers="false"/>
    </Hierarchy>
    <Hierarchy name="Time Weekly" hasAll="false" primaryKey="time_id">
    <Table name="time_by_week"/>
    <Level name="Year" column="the_year" type="Numeric" uniqueMembers="true"/>
    <Level name="Week" column="week" uniqueMembers="false"/>
    <Level name="Day" column="day_of_week" type="String"
    uniqueMembers="false"/>
    </Hierarchy>
    </Dimension>
    除了它们都连接事实表的同一列"time_id"以外,这些维度层次没有多少共同的地方,它们甚至没有使用同一个表。
    把两个层次放到一个维度中的主要原因是,这对终端用户来说有更多意义。终端用户知道如果把"Time"层次放到一个轴上而把"Time Weekly"放到另一个轴上是没有意义的。如果两个层次是同一个维度,MDX 不会允许它们用于同一个查询中。

    退化维度

    退化维度是这样的一种维度:由于它过于简单而不值得为它创建一个维表。考虑下面的事实表:
    产品 时间 支付方式 客户 数量 金额
    55 20040106 Credit 123 3 3.54
    78 20040106 Cash 89 1 20.00
    199 20040107 ATM 3 2 2.99
    55 20040106 Cash 122 1 1.18
    假设我们为支付方式列的值创建一个维表:
    payment_method
    Credit
    Cash
    ATM
    这个维表没什么意义,它只有三个取值,没有额外的信息,并产生了额外的连接开销。你可以创建一个退化维度,只要声明一个维度却不指定表,Mondrian 会认为这些列是来自事实表。
    <Cube name="Checkout">
    <Table name="checkout">
    <Dimension name="Payment method">
    <Hierarchy hasAll="true">
    <!-- 这里没有Table 元素 -->
    <Level name="Payment method" column="payment_method"
    uniqueMembers="true"/>
    </Hierarchy>
    </Dimension>
    <!-- 其他维度和度量-->
    </Cube>
    注意由于没有连接,Dimension 的foreignKey 属性是不必要的,并且Hierarchy 元素没有Table 子元素或primaryKey 属性。

     

    内嵌表

    http://mondrian.pentaho.com/documentation/schema.php#Inline_tables
    InlineTable 构件允许你在模式文件定义一个数据集。你必须要声明列名,列类型(String 或Numeber),以及一个行集。像Table 和View 一样,你必须提供一个唯一别名以引用这个数据集。这里是一个例子(定义了严重性级别维度):
    <Dimension name="Severity">
    <Hierarchy hasAll="true" primaryKey="severity_id">
    <InlineTable alias="severity">
    <ColumnDefs>
    <ColumnDef name="id" type="Numeric"/>
    <ColumnDef name="desc" type="String"/>
    </ColumnDefs>
    <Rows>
    <Row>
    <Value column="id">1</Value>
    <Value column="desc">High</Value>
    </Row>
    <Row>
    <Value column="id">2</Value>
    <Value column="desc">Medium</Value>
    </Row>
    <Row>
    <Value column="id">3</Value>
    <Value column="desc">Low</Value>
    </Row>
    </Rows>
    </InlineTable>
    <Level name="Severity" column="id" nameColumn="desc" uniqueMembers="true"/>
    </Hierarchy>
    </Dimension>
    这跟你的数据库有一个名为severity 的表以及下面的声明是一样的效果。
    Severity 表:
    id desc
    1 High
    2 Medium
    3 Low

    成员属性

    成员属性通过Level 内的Property 元素来定义,例如:
    <Level name="MyLevel" column="LevelColumn" uniqueMembers="true">

    <Property name="MyProp" column="PropColumn"

    formatter="com.example.MyPropertyFormatter"/>
    <Level/>
    Property 的属性formatter 定义了一个属性格式化器,它修改了成员的
    getPropertyFormattedValue()的默认行为。格式化器要实现mondrian.spi.PropertyFormatter接口。
    一旦属性在模式中定义了以后,就可以在MDX 语句中使用它,通过member.Properties("属性名")函数。例如:
    SELECT
    {[Store Sales]} ON COLUMNS,
    TopCount(Filter([Store].[Store Name].Members,
    [Store].CurrentMember.Properties("Store Type") = "Supermarket"),
    10, [Store Sales]) ON ROWS
    FROM [Sales]
    先筛选类型为"Supermarket"的商场(Filter 函数),再选出销售额最大的十家(TopCount 函数),把它们放在行上。

    计算成员

    假设你想创建一个度量,它的值不是来自事实表的列,而是来自一个MDX 公式
    有两种方式。
    一种方式使用with member 字句,像这样:
    WITH MEMBER [Measures].[Profit] AS '[Measures].[Store Sales]-[Measures].[Store Cost]',
    FORMAT_STRING = '$#,###'
    SELECT {[Measures].[Store Sales], [Measures].[Profit]} ON COLUMNS,
    {[Product].Children} ON ROWS
    FROM [Sales]
    WHERE [Time].[1997]
    但比起在每个MDX 查询中包含这个子句,更好的办法是,你可以把这个成员定义到模式中,作为立方体定义的一部分:
    <CalculatedMember name="Profit" dimension="Measures">
    <Formula>[Measures].[Store Sales] - [Measures].[Store Cost]</Formula>
    <CalculatedMemberProperty name="FORMAT_STRING" value="$#,##0.00"/>
    </CalculatedMember>
    你可以给计算成员指定SOLVE_ORDER 属性,用于确定计算时的优先级:
    <CalculatedMemberProperty name="SOLVE_ORDER" value="2000"/>

    命名集合

    <Cube name="Warehouse">
    ...
    <NamedSet name="Top Sellers">
    <Formula>
    TopCount([Warehouse].[Warehouse Name].MEMBERS, 5,
    [Measures].[Warehouse Sales])
    </Formula>
    </NamedSet>
    </Cube>
    在MDX 中使用:
    SELECT
    {[Measures].[Warehouse Sales]} ON COLUMNS,
    {[Top Sellers]} ON ROWS
    FROM [Warehouse]
    WHERE [Time].[Year].[1997]

    星型和雪花型

    前面的立方体都是基于一个事实表、事实表上的维度以及连接到事实表的维表构建。这是最普通的映射方式,称为星型模式(Star Schema)。
    一个维度可以基于不止一个维表,只要这些表能有良好定义的路径连接到事实表。这样定义维度的方式就是一个雪花型模式(Snowflake Schema)。这些维表通过Join 操作来定义。例如:
    <Cube name="Sales">
    ...
    <Dimension name="Product" foreignKey="product_id">
    <Hierarchy hasAll="true" primaryKey="product_id" primaryKeyTable="product">
    <Join leftKey="product_class_key" rightAlias="product_class"
    rightKey="product_class_id">

    <Table name="product"/>
    <Join leftKey="product_type_id" rightKey="product_type_id">

    <Table name="product_class"/>
    <Table name="product_type"/>

    </Join>
    </Join>
    </Hierarchy>
    </Dimension>
    </Cube>
    上面定义了一个由三个表组成的Product 维度。事实表连接到product(通过外键
    product_id),而product 连接到product_class(通过外键product_class_id),而
    product_class 连接到product_type(通过外键product_type_id)。我们需要一个Join 元素内嵌套一个Join 元素,因为Join 接收两个操作数。操作数可以是表、连接(Join)甚至查询。
    注意这里Join 元素有一个rightAlias 属性。这是必要的,因为Join 的右边组件(嵌套的Join元素)由不止一个表组成。这种情形下leftAlias 属性是不必要的,因为leftKey 来自product表,没有歧义。

     

    共享维度

    当一个维度(维表)被多个立方体使用时,可以把它定义为共享维度(shared dimensions),在立方体内引用这个维度即可。因为一个共享维度不属于一个立方体,你必须给它一个明确的表(或其他数据源)。当你在某个立方体中使用它时,指定维度的外键。
    <Dimension name="Store Type">
    <Hierarchy hasAll="true" primaryKey="store_id">
    <Table name="store"/>
    <Level name="Store Type" column="store_type" uniqueMembers="true"/>
    </Hierarchy>
    </Dimension>
    <Cube name="Sales">
    <Table name="sales_fact_1997"/>
    ...
    <DimensionUsage name="Store Type" source="Store Type" foreignKey="store_id"/>
    </Cube>

    闭包表

    http://mondrian.pentaho.com/documentation/schema.php#Closure_tables
    举例来说,闭包表(closure table)就是包含所有雇员/主管关系记录(不管深度如何)的SQL 表。

    聚集表

    http://mondrian.pentaho.com/documentation/schema.php#Aggregate_tables
    设想一个CEO要运行一个销售报表,这个报表只包含一个数值:今年所有产品在所有地区的销售总额。为了获得这个数值,Mondrian产生像这样的一条SQL语句:
    SELECT sum(store_sales)
    FROM sales_fact, time
    WHERE sales_fact.time_id = time.time_id AND time.year = 2005
    并发送给数据库,而数据库要花好几分钟去执行它。这也容易理解,因为数据库要读取事实表中所有今年的记录(比方说,几百万条销售数据)然后汇总成一个汇总数。很明显,在这里,以及其他类似的时候,所需要的只是一个预先计算的概括性数据:聚集表。
    聚集表跟基础事实表同时共存,包含着从事实表建立的预先聚集的度量。它在Mondrian的模式文件中注册,因此在一个特定的查询中能应用得上的时候,Mondrian 就能够选择某个聚集表而不是事实表。

    Mondrian 有一个工具AggGen (aggregate generator)用于辅助设计和维护聚集表。它可以生成创建聚集表的SQL 语句,它也可以根据一条MDX 语句,给出能够优化这个查询的创建/插入聚集表的SQL 语句。

     

    <Cube name="Sales">

    <Table name="sales_fact_1997">

    <AggName name="agg_c_special_sales_fact_1997">

    <AggFactCount column="FACT_COUNT"/>

    <AggMeasure name="[Measures].[Store Cost]" column="STORE_COST_SUM"/>

    <AggMeasure name="[Measures].[Store Sales]" column="STORE_SALES_SUM"/>

    <AggLevel name="[Product].[Product Family]" column="PRODUCT_FAMILY"/>

    <AggLevel name="[Time].[Quarter]" column="TIME_QUARTER"/>

    <AggLevel name="[Time].[Year]" column="TIME_YEAR"/>

    <AggLevel name="[Time].[Quarter]" column="TIME_QUARTER"/>

    <AggLevel name="[Time].[Month]" column="TIME_MONTH"/>

    </AggName>

    </Table>

     

    <!-- Rest of the cube definition -->

    </Cube>

     

    展开全文
  • 模式、外模式、内莫斯,亦称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。 模式描述的是数据的全局逻辑结构。... DDL:数据定义语言,用来定义数据库模式、外模式、内模式...

    模式、外模式、内莫斯,亦称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。

    模式描述的是数据的全局逻辑结构。
    外模式涉及的是数据的局部逻辑结构,通常是模式的子集
    内模式,亦称存储模式,是数据库在数据系统内部的表示,即对数据的物理结构和存储方式的描述。

    DDL:数据定义语言,用来定义数据库模式、外模式、内模式的语言。
    DML:数据操纵语言,用来对数据库中的数据进行查询、插入、删除和修改的语句。

    展开全文
  • 二、模式定义与删除 1、模式定义(SQL)or 数据库的创建(mysql语言) 2、模式的删除(SQL)or 数据库的删除(mysql语言) 三、表的定义、删除与修改 1、表 1.1表的定义 1.2表的删除 1.3表的修改 2、...

    目录

    一、本篇作为例子的三个表

    二、模式的定义与删除

    1、模式的定义(SQL)or 数据库的创建(mysql语言)

    2、模式的删除(SQL)or 数据库的删除(mysql语言)

    三、表的定义、删除与修改

    1、表

    1.1表的定义

    1.2表的删除

    1.3表的修改

    2、数据类型

    3、索引


    一、本篇作为例子的三个表

    Student

    学号(Sno)

    姓名(Sname)性别(Ssex)年龄(Sage)所在系(Sdept)
    201215121李勇20CS
    201215122刘晨19

    CS

    201215123王敏18MA
    201215125张立19IS

                                                                                             Course

    课程号(Cno)课程名(Cname)先行课(Cpno)学分(Ccredit)
    1数据库54
    2数学2
    3信息系统14
    4操作系统63
    5数据结构74
    6数据处理2
    7PASCAL语言64

                                                                                                   SC

    学号(Sno)课程号(Cno)成绩(Grade)
    201215121192
    201215121285
    201215121388
    201215122290
    201215122380

    二、模式的定义与删除

    1、模式的定义(SQL)or 数据库的创建(mysql语言)

    语法:create database 数据库名;

    例:create database test;

    解释:该例创建了一个名为test的模式(数据库)。

    2、模式的删除(SQL)or 数据库的删除(mysql语言)

    语法:drop database 数据库名;

    例:drop database test;

    解释:该例删除了一个名为test的模式(数据库)。

    三、表的定义、删除与修改

    1、

    1.1表的定义

    语法:

    create table <表名> (<列名> <数据类型> [列级完整性约束] ,

                                         ...

                                         <列名> <数据类型> [列级完整性约束] ,

                                          [表级完整性约束]

                                         );

    例1:

    create table Student

    (Sno char(9) primary key,       /*列级完整性约束条件,Sno是主码*/

    Sname char(20) unique,        /*Sname取唯一值*/

    Ssex char(2),

    Sage smallint,

    Sdept char(20)

    );

    创建后查看属性:

    例2:

    create table Course

    (Cno char(4) primary key,          /*列级完整性约束条件,Cname不能取空值*/

    Cname char(40) not null,           /*Cpno的含义是先修课*/

    Cpno char(4),

    Ccredit smallint,

    foreign key (Cpno) references Course(Cno)

    /*表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno*/

    );

    创建后查看属性:

    例3:

    create table SC

    (Sno char(9),

    Cno char(4),

    Grade smallint,

    primary key(Sno, Cno),

    foreign key(Sno) references Student(Sno),

    foreign key(Cno) references Course(Cno)

    );

    创建后查看属性:

    三个表添加后查看:

    附加:常用的列表约束

     auto_increment:递增

    1.2表的删除

    • 语法:drop table 表名;

       

    1.3表的修改

        创建例子:

        

    • 增加列

           语法:alter table 表名 add 属性名 数据类型 【列级完整性约束】;

           样例

           例子1:alter table myname add age smallint;

           解释:在表myname中新添加一列age,数据类型为smallint。

           

           例子2:  alter table myname add Id char(10) primary key;

           解释:在表myname中新添加一列Id,数据类型为10个长度的字符串,并设为主键。

           

    • 删除列

           语法:alter table 表名 drop 属性名;

           样例

           例子1:alter table myname drop age;

           解释:在表myname中删除列age。

           

    • 添加表级完整性约束条件

           语法:alter table 表名 add 表级完整性约束;

           样例

           例子1:alter table myname add unique(name);

           解释:在表myname中添加了约束条件:name属性取唯一值。

           

    • 修改列的属性

           语法:alter table 表名 modify 列名 新的数据类型 【列级完整性约束条件】;

           样例

           例子1:alter table myname modify Id int;

           解释:修改表myname的列Id的数据类型为int。

           

    • 删除主键

          语法: alter table myname drop primary key;

           

    2、数据类型

    参考菜鸟教程:MySQL 数据类型 | 菜鸟教程

    3、索引

    1) 创建索引语法

    CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name

    [USING index_type]

    ON table_name (index_col_name,...)

    2) 创建样例

    例:CREATE INDEX idx_sno ON Student(Sno);

    3) 查看索引

    语法:SHOW INDEX FROM 表名;

    4) 修改索引

    MySQL中并没有提供修改索引的直接指令,一般情况下,我们需要先删除掉原索引,再根据需要创建一个同名的索引,从而变相地实现修改索引操作。

    5) 删除索引

    语法:ALTER TABLE 表名 DROP INDEX 索引名;

    参考博文:Mysql中索引的 创建,查看,删除,修改 - leayrainy - 博客园

    注:有关MySql数据库的更多其他操作请参见MySql目录进行查找。(建议收藏)

    展开全文
  • 数据定义

    千次阅读 2016-11-03 21:54:13
    机智云后台提供了数据点的定义界面,通过数据定义,设备与云端、APP端数据通信的含义将得到明确。数据定义的好处: 明确设备与云端、APP端数据通信的含义。 云端根据数据定义,解析设备数据,用户可...
  • 模式识别(一)模式定义

    千次阅读 2019-06-23 20:25:40
    模式定义: 为了让机器执行和完成识别任务,必须对分类识别对象进行科学的抽象,建立其数学模型,用以描述和代替识别对象,这种对象的描述就是模式模式的表现形式: 特征矢量、符号串、图、关系式 模式识别的...
  • 数据库模式定义与基本表定义

    千次阅读 2018-07-27 00:15:35
  •  正文 一个数据库管理系统的实例中,可以建立多个数据库,一个数据库可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据对象。 不过一般在开发中几乎不用模式这个东西,基本上都是直接建数据库,然.....
  • 3-2数据定义

    千次阅读 2016-06-30 13:13:14
    3-2数据定义tags:数据库 ...因此SQL的数据定义功能包括,模式定义,表定义,视图和索引定义. 操作对象 创建 删除 修改 模式 create schema drop schema 表 create table drop table alter table
  • 数据模型和数据模式的理解和区别

    千次阅读 2021-02-10 01:38:22
    数据模型和数据模式的理解和区别       用自己的话总结就是:给定一个数据模型,怎么描述?用数据模式来描述。       怎么理解看下文: 什么是数据...
  • 关系模式(1)什么是关系模式(2)定义关系模式3.关系模式和关系的对比4.关系数据库 0.思维导图 1. 关系 什么是关系? 单一的数据结构----关系 现实世界的实体以及实体间的各种联系均用关系来表示 逻辑结构----二...
  • Kibana定义索引模式

    万次阅读 2018-08-09 17:32:49
    索引模式告诉Kibana您想要探索哪些Elasticsearch索引。 索引模式可以匹配单个索引的名称,或者包含通配符(*)以匹配多个索引。...为莎士比亚数据集创建模式,该数据集具有名为shakespeare的索引...
  • SQL的数据定义功能及语句:

    千次阅读 2019-06-27 14:06:00
    模式定义 表定义 视图定义 索引定义 SQL的数据定义语句 操作对象 操作方式 创建 删除 修改 模式 CREATE SCHEMA DROP SCHEMA 表 CREATE TABLE DROP TABLE ALTEB TABLE ...
  • 数据定义 (1)数据定义概览 SQL的数据定义功能: 模式定义、表定义、视图和索引的定义 (2)模式的定义与删除—SCHEMA 定义模式实际上定义了一个命名空间 在这个空间中可以定义该模式包含的数据库对象,例如基本表、...
  • SQL数据定义语言(DDL)

    千次阅读 2016-10-19 16:48:53
    数据库模式定义语言DDL(DataDefinition Language),是用于描述数据库中要存储的现实世界实体的语言。一个数据库模式包含该数据库中所有实体的描述定义。...模式编译器处理模式定义主要产生两种类型的数据数据字典以及
  • (一)模式定义、删除
  • 数据字典之定义

    千次阅读 2007-04-23 09:17:00
    数据字典内容包括:数据库中所有模式对象的信息,如表、视图、簇、及索引等。分配多少空间,当前使用了多少空间等。列的缺省值。约束信息的完整性。用户的名字。用户及角色被授予的权限。用户访问或使用的审计信息。...
  • SQL中的数据定义

    千次阅读 2018-01-06 14:34:10
    模式定义 在我们使用的MySQL中,创建一个模式(schema)和创建一个数据库(database)在效果上是一样。我一般使用创建一个数据库(database)。 一个关系型数据库的实例通常能够建立多个数据库,而每个数据库又...
  • SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,语句INSERT、DELETE、UPDATE实现( )功能。 ...正确答案: D 你的答案: D ...DDL:数据库模式定义语言,关键字:create DML:数据操纵语言,
  • 3.2学生-课程数据库 (一)数据定义

    千次阅读 2020-03-17 21:40:46
    文章目录学生-课程模式S-T(一)数据定义数据字典**1.模式定义(mysql中不支持)1.1创建模式1.2删除模式2.数据库的定义2.1创建数据库2.2选择数据库2.3删除数据库3.基本表的定义3.1创建基本表数据类型 在SQL中域的...
  • 大话设计模式这本书写的非常有创意,非常适合我这种新手。用了大约两个星期的时间看完了这本书,代码全部都敲了一遍,虽然没有一点基础,但是还是领略到了面向对象的威力。看完之后再也不想使用面向过程的语言了,...
  • SQL中模式定义和删除

    千次阅读 2017-06-14 15:19:37
    以下代码sqlserver2012 定义模式creat schema <模式...--为用户sa定义一个学生-课程模式S-T create schema test authorization U1--然后在test模式在建立相应的表 create table test.TAB1 ( COL1 smallint, COL2 int
  • 这些语句可用于修改表模式中出现的错误、改变分区路径,以及其他一些操作。 ALTER TABLE仅仅会修改表元数据,表数据本身不会有任何修改。需要用户自己确认所有的修改都和真实的数据是一致的。 表重命名 使用以下这个...
  • 例如,可以定义表的数据文件存储在什么位置、使用什么样的存储格式,等等。前面的文章我们在”中已经讨论了很多种存储格式,同时在后续的文章中我们将会再次探讨一下更加高级的格式。本文中,我们会讨论其他一些在...
  • HiveQL是Hive查询语言。和普遍使用的所有SQL方言一样,它不完全遵守任一种ANSI SQL标准的修订版。HiveQL可能和MySQL的方言最接近,但是两者还是存在显著性差异的。...《HiveQL的数据定义》的内容是H...
  • SQL————数据定义详细语句

    千次阅读 2018-09-24 10:56:31
    最近看了下数据库,发现有些东西过一段时间不看就忘了,那么怎么办?通过博客记录下来,写的过程是一段学习,以后看的时间也可以直接博客... 例:为用户ZHANG创建一个模式TEST,并且在其中定义一个表TAB1 CREA...
  • Pytorch学习(三)定义自己的数据集及加载训练

    万次阅读 多人点赞 2019-06-06 14:58:14
    对于如何定义自己的Datasets我讲从以下几个方面进行解说 ...Pytorch中有工具函数torch.utils.Data.DataLoader,通过这个函数我们在准备加载数据集使用mini-batch的时候可以使用多线程并行处理,这样可以加快我...
  • 直到现在我们的通信还是仅仅在使用以结尾的字符串。当然,在Internet标准协议里它是最常用的。... 数据模式用于定义QuickServer和客户Socket之间的数据交换格式。下面是目前支持的三种模式: DataMode.STRING
  • 数据的三级模式机构含有:外模式模式,内模式  目的:将用户应用和数据库分离出来 为了支持数据的三级模式...通常以某种数据模型为基础,定义数据库中全部数据的逻辑结构如:数据记录的名称,数据项的名称,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,439,964
精华内容 575,985
关键字:

数据模式定义