请问两个外键可否对应同一个主键的问题,谢谢

lj1006 2007-12-15 05:08:40
有表A,主键是bm
有表B,我想把表B的两个字段(bm,dw)都与表A的bm关联,请问如何实现阿,谢谢
...全文
219 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2007-12-15
  • 打赏
  • 举报
回复
举个例子:
物料A
物料A1
物料A2

parent child
A A1
A A2
中国风 2007-12-15
  • 打赏
  • 举报
回复
--可用建外健:

create table T(ID int unique)

create table T2(ID1 int foreign key references T(ID),ID2 int foreign key references T(ID))
benbenkui 2007-12-15
  • 打赏
  • 举报
回复
一个足以
winstonbonaparte 2007-12-15
  • 打赏
  • 举报
回复
你干吗在表B要建两个外键的啊?一个不就行了吗,没必要的
dawugui 2007-12-15
  • 打赏
  • 举报
回复
这个没必要.

同一表,一个字段就可以了.
MyISAM InnoDB 区别 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,   MyISAM 和 InnoDB 讲解   InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。   以下是一些细节和具体实现的差别:   ◆1.InnoDB不支持FULLTEXT类型的索引。   ◆2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。   ◆3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。   ◆4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。   ◆5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。   另外,InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”   两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。   我作为使用MySQL的用户角度出发,Innodb和MyISAM都是比较喜欢的,但是从我目前运维的数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是我的首选。   原因如下:   1、首先我目前平台上承载的大部分项目是读多写少的项目,而MyISAM的读性能是比Innodb强不少的。   2、MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。   3、从平台角度来说,经常隔1,2个月就会发生应用开发人员不小心update一个表where写的范围不对,导致这个表没法正常用了,这个时候MyISAM的优越性就体现出来了,随便从当天拷贝的压缩包取出对应表的文件,随便放到一个数据库目录下,然后dump成sql再导回到主库,并把对应的binlog补上。如果是Innodb,恐怕不可能有这么快速度,别和我说让Innodb定期用导出xxx.sql机制备份,因为我平台上最小的一个数据库实例的数据量基本都是几十G大小。   4、从我接触的应用逻辑来说,select count(*) 和order by 是最频繁的,大概能占了整个sql总语句的60%以上的操作,而这种操作Innodb其实也是会锁表的,很多人以为Innodb是行级锁,那个只是where对它主键是有效,非主键的都会锁全表的。   5、还有就是经常有很多应用部门需要我给他们定期某些表的数据,MyISAM的话很方便,只要发给他们对应那表的frm.MYD,MYI的文件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了,因为光给别人文件,受字典数据文件的影响,对方是无法使用的。   6、如果和MyISAM比insert写操作的话,Innodb还达不到MyISAM的写性能,如果是针对基于索引的update操作,虽然MyISAM可能会逊色Innodb,但是那么高并发的写,从库能否追的上也是一个问题,还不如通过多实例分库分表架构来解决。   7、如果是用MyISAM的话,merge引擎可以大大加快应用部门的开发速度,他们只要对这个merge表做一些select count(*)操作,非常适合大项目总量约几亿的rows某一类型(如日志,调查统计)的业务表。   当然Innodb也不是绝对不用,用事务的项目如模拟炒股项目,我就是用Innodb的,活跃用户20多万时候,也是很轻松应付了,因此我个人也是很喜欢Innodb的,只是如果从数据库平台应用出发,我还是会首选MyISAM。   另外,可能有人会说你MyISAM无法抗太多写操作,但是我可以通过架构来弥补,说个我现有用的数据库平台容量:主从数据总量在几百T以上,每天十多亿 pv的动态页面,还有几个大项目是通过数据接口方式调用未算进pv总数,(其中包括一个大项目因为初期memcached没部署,导致单台数据库每天处理 9千万的查询)。而我的整体数据库服务器平均负载都在0.5-1左右。
第一章 1 数据管理技术的发展经历了人工管理、文件系统、数据库和高级数据库四个阶段 2 文件系统的三个缺陷:数据冗余、数据不一致、数据联系弱 3 在文件系统阶段,程序设计处于主导地位;在数据库阶段,数据占据了中心位置 4 数据库管理系统(DBMS)的类型:(1) 层次型[1:N] (2) 网状型[M:N] (3) 关系型 (4) 面向对象型 5 数据描述的三个阶段:(1) 概念设计 (2) 逻辑设计 (3) 物理设计 6 数据联系的三种类型:(1) 一对一联系 (2) 一对多联系 (3) 多对多联系 7 根据数据的抽象级别定义的四种模型: (1) 概念模型:表达用户需求观点的模型,抽象级别最高,主要是ER模型 (2) 逻辑模型:表达计算机实现的模型,主要有层次、网状和关系模型三种,其中关系模型 是主流 (3) 外部模型:表达用户使用观点的模型,供程序使用 (4) 内部模型:表达DB物理结构的模型,与软硬件紧密联系,由DBMS自动实现 8 从用户[应用程序]到数据库之间,DB的数据结构描述有三个层次: (1) 外部模式[型]:用户与数据库系统的接口 (2) 逻辑模式[型]:数据库全部数据和整体逻辑结构的描述 (3) 内模式[型]:数据库在物理存储方面的描述 9 三层模式之间存在着两级映像: (1) 外模式/逻辑模式映像:定义外模式和逻辑模式之间的对应性 (2) 逻辑模式/内模式映像:定义逻辑模式和内模式之间的对应性 10 数据独立性是指应用程序和数据库的数据结构之间相互独立,包括: 1) 物理数据独立性 - 对内模式的修改不影响逻辑模式,只修改逻辑模式/内模式映像即可 2) 逻辑数据独立性 - 对逻辑模式的修改不影响外模式,只修改外模式/逻辑模式映像即可 11 DBMS的主要功能 (1) 数据库的定义 - 提供的DDL语句 (2) 数据库的操纵 - 提供的DML语句 (3) 数据库的保护:a) 数据库的恢复 b) 数据库的并发控制 c) 数据的完整性 d) 数据的安全性 (4) 数据库的维护:提供的各种工具 (5) 数据字典:存放三级结构定义 12 DBA的主要职责 1) 定义逻辑模式 2) 定义内模式 3) 定义外模式 4) 定义安全性规则 5) 定义完整性规则 6) 数据库的转储与恢复 第二章 1 数据库系统生存期 1) 从软件的规划、研制、实现、投入运行后的维护,直到它被新的软件所取代的整个期间 2) 数据库系统的生存期分为七个阶段: (1) 规划阶段:系统调查、可行性分析、确定总目标 (2) 需求分析阶段:分析业务流程[业务流程图]、确定系统边界、分析数据处理过程[数 据流图]、生成数据字典 (3) 概念设计阶段:概念模型独立于计算机硬件和软件,主要有三个步骤 a 进行数据抽象,设计局部概念模型 b 将局部概念模型综合成全局模型 c 评审 (4) 逻辑设计阶段:把概念模型转换为DBMS可以处理的逻辑模型,主要有五个步骤 a 将概念模型(ER模型)转换为逻辑模型(关系模型) b 设计外模型 c 设计应用程序与数据库的接口 d 评价模型 e 修正模型 (5) 物理设计阶段:完全依赖于给定的硬件环境和数据库产品 (6) 实现阶段:定义数据库结构;数据装载;编制与调试应用程序;数据库运行 (7) 运行维护阶段:主要由DBA完成 2 ER模型到关系模型的转换 1) 实体类型转换:将实体转换为关系模式,实体属性即为关系模式的属性,实体的标识符 为关系模式的键 2) 二元联系类型转换 (1) 1:1联系:在任意一个关系模式中加入另一个关系模式的键[作为外键]和联系类型的 属性 (2) 1:N联系:在N端的关系模式加入1端的键[作为外键]和联系类型的属性 (3) M:N联系:将联系类型转换为关系模式,其属性为两个实体的键和联系类型的属性 第三章 1 FD推理规则:1) 自反性 2) 增广性 3) 传递性 2分解是解决冗余的主要方法。分解之后,能否表示同样的数据,用"无损分解"特性表示 ;能否保持原来的函数依赖关系,用"保持FD"特性表示 3 关系模式的分解标准 "范式 "特点 "分解特征 " " " "无损分解 "保持FD " "1NF "字段是不可再分的原子值 " " " "2NF "非主键字段完全依赖主键 "是 "是 " "3NF "非主键字段不能相互依赖 "是 "是 " "BCNF "主键之间不能相互依赖 "是 "不一定 " "4NF "消除多值依赖 "是 "不一定 " 第四章 1 基本符号 "操作 "传统 "并( )、交( ) 、差(-)、笛卡尔积(×) " " "扩充 "投影(π)、选择(σ)、连接( )、除(÷) " "运算符 "比较 ">、 、<、 、=、 " " "逻辑 " (与)、 (或)、 (非) " 2 假设数据库
MySQL 教程MySQL 是流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。在本教程中,会让大家快速掌握 MySQL 的基本知识,并轻松使用 MySQL 数据库。什么是数据库?数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:1.数据以表格的形式出现2.每行为各种记录名称3.每列为记录名称所对应的数据域4.许多的行和列组成一张表单5.若干的表单组成databaseRDBMS 术语 在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:数据库: 数据库是一些关联表的集合。数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。主键主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。外键外键用于关联两个表。复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。MySQL 为关系型数据库(Relational Database Management System), 这种所谓的关系型可以理解为表格的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格: 表头(header): 每一列的名称;列(col): 具有相同数据类型的数据的集合;行(row): 每一行用来描述某条记录的具体信息;值(value): 行的具体信息, 每个值必须与该列的数据类型相同;键(key): 键的值在当前列中具有唯一性。MySQL数据库MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 是开源的,目前隶属于 Oracle 旗下产品。MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。MySQL 使用标准的 SQL 数据语言形式。MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。MySQL 对PHP有很好的支持,PHP 是目前流行的 Web 开发语言。MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。Redis 教程REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧