精华内容
下载资源
问答
  • 有些时候会把不同的字段分离在两个或中,用共同的外键关联起来,为什么这么做呢?什么时候才需要这样做? 的价值在存储的同时还在于关联。 一个字段对于同表的其他字段,只有一个值而不是个时,就不...

    什么是外键,百度百科是这样说的:

    如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。

     

    外键是两个表中相同的同一个键,例如用户ID,user_id。

    有些时候会把不同的字段分离在两个或多个表中,用共同的外键去关联起来,为什么这么做呢?什么时候才需要这样做?

    表的价值在存储的同时还在于关联

    一个字段对于同表的其他字段,只有一个值而不是多个时,就不需要将这个字段放到外面其他表,直接放在主表里面就好了。这叫做一对一

    而当一个字段关联的另一个字段的值会有多个时,就需要将另一个字段放到单独的表中,用外键关联起来,通常是一个id键。这叫做多对一

     

    那么,在表中字段都只是一个值时,还需要将这些字段再分开放不同的表吗?

    答案是需要的(yes)。考虑到查询性能,如果字段之间对业务需求而言并无关联,那么就可以将字段分开为多个表,这样业务在查询时就只需要查询有关的表字段,而不会因为多个无关的字段都在一个表内而查询出来多余无关的字段进而拖慢性能。

     

    还有一种多对多的关联方式。

    多对多用在什么样的场景呢?其实我们可以用面向对象的思想来看待这种问题。

    我们把“一”看做是编程里的概念“基本数据类型”,int、long、bool之类的啦;

    把“多”看做是编程里的概念“对象”,也就是Object,例如Java的Object、js的json对象。对象是具有多个属性的,而基本数据类型就只有一个基本数据类型,换言之  对象具有多个基本类型,而且一般都允许开发人员后期更改属性的名字、类型。

    在这里,关联性数据库这里,“一”即字段的数据类型,什么int、varchar、datetime、decimal等,即看做基本数据类型;“多”即一个表、一个对象,表的字段看做是对象的属性,这是一种映射关系。

    明白这种面向对象思想就好说了。

    多对多的关联表就像是Java中的一个Map<?,?>对象一样,它这个表起到的功能就是将多个表关联起来,所谓对象对对象,表对表。都是通过共同的外键进行关联的。

     


    分有一对一、一对多、多对多,这么设计都是为了首先尊重业务需求、其次追求性能与节约存储空间。

    设计表的字段分布时,尽量将业务需求中同时查询出来的数据的字段放到一个表内,这样既满足了业务查询数据需求,又节约了存储空间。

    展开全文
  • 外键 、操作关联表


    外键

    在实际的项目开发中,一个健壮的数据库一定有很好的参照完整性。为了保证多个表之间能够建立正确的连接关系,因此引入外键的概念。


    什么是外键

    外键是指引用另一个表的一列或多列,被引用的列应该具有主键约束或唯一性约束外键用于建立和加强两个表数据之间的连接,接下来我们来通过两张表来讲解什么是外键。

    首先创建两个表,一个班级表(grade)和一个学生表(student),具体语句如下:

    CREATE DATABASE test;
    
    use test
    展开全文
  • 大数据工具之HIVE外键多表关联的介绍.zip
  • SQL语法整理[2]——用主外键实现表关联及数据库管理 用主外键实现表关联 主键 主键是中的一列或者列数据,用来惟一标识一行数据.在中,不允许有主键相同的行存在.在受主键约束的列中,不能有空值(NULL)出现。...
      
    

    SQL语法整理[2]——用主外键实现表关联及数据库管理

    用主外键实现表关联

    主键

    主键是表中的一列或者多列数据,用来惟一标识一行数据.在表中,不允许有主键相同的行存在.在受主键约束的列中,不能有空值(NULL)出现。为了有效实现数据的管理,每一张表有应该有一个主键,而且只能有一个。主键可能是列的组合。

     

    创建表时创建主键

    id  INT  CONSTRAINT  pk_test1_id    PRIMARY  KEY

     

    查看表格属性

    EXECUTE   SP_HELP    [表名]

     

    有时候需要有多个列的联合,才能惟一标识一条信息

    CREATE     TABLE    book

    (

       isbn  INT,              ---图书编号

       copy_no   INT,         ---图书副本号

       book_name   CHAR(20),  ---图书名称

       CONSTRAINT  pk_book_isbn_copy_no  PRIMARY KEY(isbn,copy_no) ---定义表级主键约束

    )

     

    创建表后添加主键

    ALTER TABLE table

    ADD CONSTRAINT constraint_name PRIMARY KEY(column[,…n])

     

    修改列的值,用update。修改列的属性,用alter table…alter column [列名]

     

    外键

    外键约束主要是为了维护两个表之间的一致性关系,是建立在主键的基础之上的,其值是参考主键的内容。主键的值是惟一的,不能为空,而外键的值可以是重复的、为空的,外键的数值必须在主键中出现。在同一张表中可以有多个外键,每一个外键的创建都必须有一个主键相对应,外键可以是一个列,也可以是多个列的组合。

     

    在创建表时,定义外键

    CREATE TABLE table_name    

    (                          

    column_name datatype       

    [CONSTRAINT constraint_name]

    {                          

    [FOREIGN KEY]              

    REFERENCES referenced_table_name[(ref_column)]

    }                                             

    )                                             

    e.g=〉

    CREATE     TABLE       junior_member

    (

      member_id   INT,

      adult_member_id  INT,

      member_name   CHAR(10),

      member_gender  CHAR(2),

      CONSTRAINT    pk_junior_member_id   PRIMARY  KEY(member_id),

      CONSTRAINT    fk_junior_ adult_member_id FOREIGN  KEY (adult_member_id)

      REFERENCES   adult_member(member_id)

    )

     

    /*为表格adult_member创建一个外键约束*/

    ALTER     TABLE       adult_member

    ADD  CONSTRAINT   fk_adult_member_id_member_id

    FOREIGN   KEY(member_id)   REFERENCES    member(member_id)

     

    表关联种类

    表之间(也就是实体之间)有一定的关联种类,实体之间的不同种类,决定着实体或表格之间的对应关系。有的可以拆成1对1的关系,有的可以拆成1对n的关系,有的可以拆成n对n的关系,不同的关系拆成不同数量的表

     

    在关系数据库中有3个要素:

    实体(Entity):客观存在的事物。例如:学生,老师,家长。

    属性(Attribute):实体所具有的特性。例如:学生的姓名,年龄,性别。

    关系(Relation):实体与实体之间的关系。例如:学生和老师,学生与家长。

     

    a.一对一的关系

         两个实体中,如果有一个实体的数值确定了,则另一个实体的数值也就惟一确定了, 反之也是如此,那么这种对应关系就是一对一(1:1).

         一对一的关系实体在数据库中能够拆分为两张表,为了描述表之间的关联关系,通过  主外键的方式联系起来.

    b.一对多的关系

         实体A与B是一对多(1:n)的关系,是指当A中的一个值确定以后,可以对应到B中的  多个值;反过来,当B中的一个值确定以后,惟一地能够对应A中的一个值.

         一对多的关系可以拆分成两张表,通过主外键的方式联系起来。

    c.多对多的关系

         实体A与B是多对多(m:n)的关系,是指当选中A的一个数值确定后,可以对应到B        中的多个值;反过来,当B中一个值确定以后也可以对应A中的多个值.

         多对多的关系可以拆分成为3张表,中间的关系表与其他两张表建立起主外键的关   系,通过这张关系表来体现这两个实体之间的关系。

     

    删除主外键

    删除是有一定的顺序的。

    要先删除外键的信息,然后再删除主键,否则就会报错。

    如果要删除主键,要先看是否被外键引用,如果被引用那么就会报错。

     

    数据库的管理

    查看数据库属性

    EXECUTE     SP_HELPDB    [数据库名]

     

    数据库更名

    EXECUTE   SP_RENAMEDB   ‘newdemo’,’demo’

    (将数据库newdemo变更名称为demo)

     

    文件组更名

    USE    master

    GO

    ALTER    DATABASE    school

    MODIFY    FILEGROUP   teachers

    NAME=teacher

    GO

     

    数据文件更名

    /*将school数据库中数据文件逻辑名称为school2变更为school3*/

    USE      school

    GO

    ALTER     DATABASE     school

    MODIFY    FILE

    (

       NAME=school2,

       NEWNAME=school3,

    )

    GO

     

    修改数据文件大小

    /*修改数据库school中逻辑名称为school2的大小,将其变为23MB*/

    USE    school

    GO

    ALTER    DATABASE      school

    MODIFY    FILE

    (

       NAME=school2,

       SIZE=23

    )

    GO

     

    /*为数据库school添加一个叫linshi2的文件组*/

    ALTER     DATABASE   school

    ADD   FILEGROUP    linshi1

    GO

     

    /*为数据库school中文件组linshi1添加一个数据文件叫linshi2*/

    ALTER    DATABASE    school

    ADD   FILE

    (

       NAME=linshi2,

       FILENAME=’C:\DATA\linshi2.ndf’,

       SIZE=3,

       MAXSIZE=20,

       FILEGROWTH=1

    )

    TO   FILEGROUP   linshi1

    GO

     

    /*为数据库school添加一个日志文件,逻辑名称为school_log4*/

    ALTER    DATABASE    school

    ADD   LOG  FILE

    (

      NAME=school_log4,

      FILENAME=’C:\DATA\school_log4.ldf’,

      SIZE=3,

      MAXISZE=20,

      FILEGROWTH=1

    )

    GO

     

    删除文件组/数据文件/日志文件

    如果要删除文件组,必须要先删除文件组内的数据文件,否则不可能删除文件组.

    如果要删除数据文件,数据文件不能为空。如果数据文件内容不为空也不能删除数据文件,日志文件也是如此,如果不为空的情况下是不能删除的,只有为空的情况下才能删除.

    如果数据文件有内容,应先执行TRUNCATE TABLE table_name(删除表中的所有数据,只留下一个表的定义),然后再删除数据文件,最后删除文件组。

     

    /*先删除数据文件*/

    ALTER    DATABASE    school

    REMOVE   FILE      linshi2

    GO

     

    /*再删除文件组*/

    ALTER     DATABASE    school

    REMOVE   FILEGROUP   linshi1

    GO

    /*最后删除日志文件*/

    ALTER     DATABASE   school

    REMOVE   FILE    school_log4

    GO

     

    分离附加用户数据库

    分离、附加用户数据库是一种很好的转移数据库、备份数据库的方法。

    /*分离数据库demo*/

    USE    master

    GO

    EXECUTE    SP_DETACH_DB    ‘demo’

    GO

     

    /*将分离的demo数据库附加到SQL Server实例上*/

    USE   master

    GO

    EXECUTE   SP_ATTACH_DB    ‘demo’,

    ‘C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\demo.mdf’

    GO

     

    (如果数据库正在应用,或者在这个数据库操作环境下,是不可以分离该数据库的,只有在其他数据库的操作环境下,而且要分离的数据库不被使用的前提下,才能够使用SP_DETACH_DB命令分离数据库。)

     

    理解master数据库以及系统表在系统中的作用

    由master数据库中的系统表识别出用户自定义数据库以后,SQL Server实例将读取用户自定义数据库中的系统表。用户自定义数据库中的系统表将识别出其数据库中的文件组名称,数据文件名称与数据文件物理位置以及数据库对象等。

    master数据库中的sysdatabases表中的信息,存储着整个SQL Server实例的数据库信息,由这个表识别了其他数据库,再由用户数据库中类似于sys.filegroups以及sys.database_files的表来识别用户自定义数据库中的内容。就这样一级一级地识别出数据库中的所有对象。

     

     

     

     

     

    ——大二的期末考试整理 peace_power@126.com

     

     

     

    展开全文
  • 如何查找表外键关联表

    千次阅读 2014-10-20 16:17:52
    查询单个的所有主外键关系   select a.owner 主键拥有者 ,a.table_name 主键 ,b.column_name 主键列 ,C.OWNER 外键拥有者 ,c.table_name 外键表 ,d.column_name 外键列 from user_constraints a left ...

    查询单个表的所有主外键关系

     

    select a.owner 主键拥有者

    ,a.table_name 主键表

    ,b.column_name 主键列

    ,C.OWNER 外键拥有者

    ,c.table_name 外键表

    ,d.column_name 外键列
    from user_constraints a
    left join user_cons_columns b

    on a.constraint_name=b.constraint_name
    left join user_constraints C

    ON C.R_CONSTRAINT_NAME=a.constraint_name
    left join user_cons_columns d

    on c.constraint_name=d.constraint_name
    where a.constraint_type='P'

    and a.table_name='XXX' --需要查看主外键关系的表
    order by a.table_name

     

     

    所有表的主外键关系查询:

    select a.table_name 主表,
    b.table_name 子表,
    column_name 键,
    substr(position,1,1) P
    from
    user_constraints a, user_constraints b, user_cons_columns c
    where
    a.constraint_name = b.r_constraint_name
    and a.constraint_name = c.constraint_name
    order by 1, 2, 4;

    展开全文
  • Mysql 增加外键,删除主外键关联表

    千次阅读 2018-03-14 13:19:26
    1.建表时增加外键2.建表完成过后,通过sql语句增加外键alter table table-name ...删除主外键关联表alter table table-name add constraint 外键名 foreign key(字段名) references 引用表明(字段名) ...
  • 前提条件: 两个有联系,通过外键关联 1.普通的内链接 语法: select 条件 from 表名1 inner join 关联的表名 on 匹配条件; 2.隐士内链接(常用,推荐) 语法: select 条件 from 1,2 where 1.字段 = 2.字段 ...
  • 两个相关联表 TblRecords的判定规则字段与TblRule的id字段关联 CREATE TABLE [dbo].[TblRule]( [Id] [bigint] IDENTITY(1,1) NOT NULL, [厚度_min] [float] NOT NULL, [厚度_max] [float] NOT NULL, [平均厚度_...
  • 查询数据库外键和外键关联的表名
  • DB2、Oracle、SqlServer、Mysql四种数据库中,查看的外键信息,以及外键关联及表字段的语句。 输出的格式一样,所以之截图了一个, 有个外键会返回所有的外键值。 Oralce : select c.table_name,c....
  • –查询外键关联表(父) `` select distinct allc1.table_name 表名, allc1.constraint_name 外键名, dcc1.column_name 约束字段, --dccm.comments 字段中文名,
  • 文章目录多表设计-关联查询为什么需要多表设计?数据库设计范式第一范式(1NF)第二范式(2NF)第三范式(3NF)数据库实例外键数据库实例注意关联查询概述分类内连接(inner join)外连接交叉连接 多表设计-关联查询 为什么...
  • 一张表关联多张表,通过 foreign key (字段名) references 关联的表名(字段) 模拟一对多 一对多的结构设计,两张(一方) 从(多方) 建表原则,在多方中添加字段,把该字段作为外键指向一方的主键 一个...
  • 多表操作_外键_关联表_查询

    千次阅读 2017-11-27 15:48:45
    外键是指引用另一个中的一列或列,被引用的列具有主键约束或唯一约束。(2)目的: 外键用于建立和加强两个数据之间的连接。(3)概念: a. 主: 被引用的。 如 grade b.从 : 引用外键 。如 ...
  • 外键关联

    千次阅读 2011-07-18 20:07:05
    在数据库中,在之间经常会存在关联关系,如下面的州信息States(其中Population单位为k),以及主要城市信息Cities:(缺图)(缺图)Cities通过StateId字段和States关联。数据库中的这种存储模式可以使得数据...
  • MySQL主外键表关联表数据的同时删除

    万次阅读 2017-08-18 21:46:06
    原来是主外键关联关系。 遇到的错误和解决方法如下: 问题解决后,我又从网上找到了一篇讲解非常优秀的博文,转载至此,作者原文地址:...
  • mysql建外键+两表关联

    2021-01-01 22:14:43
    mysql建外键+两表关联 说明: 一般情况下,开发过程中是不建立外键 以创建员工部门为例 第一种方式 建表的时候指明外键 -- 创建部门 create table dept( id int primary key auto_increment, -- 部门编号 name...
  • 查询—主外键关联查询

    千次阅读 2019-07-21 17:13:35
    通过主外键实现表关联查询~
  • 这篇博客介绍如何在只知道外键名称的情况下查找到关联与列。 环境:Oracle select * from dba_constraints where constraint_name='FK_CONSTRAINT_NAME' and constraint_type = 'R'; 注意外键名称为全大写格式

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 112,116
精华内容 44,846
关键字:

无外键多表关联