首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

表上的外键约束仅仅是为了解析多值属性而创建的,这是好的设计吗?

表上的外键约束仅仅是为了解析多值属性而创建的,这并不是一个好的设计。

外键约束是用来维护表之间的关系,确保数据的完整性和一致性。它可以用于实现关系型数据库中的关联关系,确保引用的数据存在于关联的表中。外键约束的主要作用是保证数据的一致性,防止出现脏数据或者无效的引用。

然而,将外键约束用于解析多值属性并不是一个合适的设计选择。多值属性可以通过其他方式来解析,例如使用关联表或者使用数组等数据结构来存储多个值。将外键约束用于解析多值属性会导致以下问题:

  1. 数据冗余:如果每个多值属性都需要创建一个外键约束,会导致数据冗余,增加存储空间的占用。
  2. 数据不一致:外键约束只能保证引用的数据存在于关联的表中,但无法保证多值属性的一致性。如果多值属性的值发生变化,需要手动更新外键约束,容易出现数据不一致的情况。
  3. 性能影响:外键约束需要维护关联表之间的一致性,会增加数据库的维护成本和查询的开销。

对于解析多值属性,更好的设计选择是使用关联表或者使用数组等数据结构来存储多个值。这样可以避免数据冗余和数据不一致的问题,并且能够更高效地查询和操作多值属性。

总结起来,表上的外键约束仅仅为了解析多值属性而创建并不是一个好的设计选择,更好的设计是使用关联表或者其他数据结构来存储多值属性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

你真的会玩SQL吗?三范式、数据完整性

玩爆你的数据报表之存储过程编写(下) 每次上新功能时都需要添加新表,这时就要涉及到表结构的设计,那就要提到三范式,对于三范式教科书上说得很绕口,那简单点的呢?...第四范式(4NF):消除多值依赖。 第五范式(5NF):消除循环依赖。 我们设计表结构往往都尊从简单的三范式,从其他元素中消除数据冗余问题, 从特定的表中最小化冗余意味着摆脱不必要的数据。...如上图中3范式,若就想把楼栋一起查询出来,那从设计上可以分开,另用一个视图将楼栋名称一起查询出来即可。 数据完整性 数据库中的数据是从外界输入的,而数据的输入由于种种原因,会发生输入无效或错误信息。...:由用户指定的一组规则 实现数据完整性的主要方式是约束 主键约束 primary key 确保字段值不重复不为NULL 唯一约束 unique 确保字段值不重复 外键约束 foreign key 确保字段值必须来自于指定表...检查约束 check 确保字段值的取值范围 缺省约束 default  给相应字段提供默认值 注:约束即可在创表时创建,也可在已存在的表上添加 练习 ?

88070

数据库知识学习,数据库设计优化攻略(一)

1.3.1 数据库逻辑设计的规范化 数据库逻辑设计的规范化就是我们一般所说的范式,我们可以这样来简单理解范式: ➢ 第 1 规范:没有重复的组或多值的列,这是数据库设计的最低要求。...➢ 冗余可以是冗余数据库、冗余表或者冗余字段,不同粒度的冗余可以起到不同的作用。 ➢ 冗余可以是为了编程方便而增加,也可以是为了性能的提高而增加。...1.3.4 外键的设计 ➢ 外键作为数据库对象,很多人认为麻烦而不用,实际上,外键在大部分情况下是很有用的,理由是: ➢ 外键是最高效的一致性维护方法,数据库的一致性要求,依次可以用外键、CHECK...约束、规则约束、触发器、客 户端程序,一般认为,离数据越近的方法效率越高。...我这里说的谨慎,是因为级联删除和级联更新有些突破了传统的关于外键的定义,功能有点 太过强大,使用前必须确定自己已经把握好 其功能范围,否则,级联删除和级联更新可能让你的数据莫名其妙 的被修改或者丢失。

46330
  • MySQL 性能优化,优化设计及设计原则解读

    3NF:属性不依赖于其它非主属性 , 消除传递依赖,如这样的设计就不合理,学号做主键,学生课程表(学号=课程),当学号修改,对应的课程表也需要修改,这就是属于传递依赖 BCNF:符合3NF,每个表中只有一个候选键...优化设计第三步 数据库优化策略 1、选择小的数据类型 2、单独设计主键,并考虑分布式扩展 3、外键设计 (重要,我们之前开发都是直接使用的弱外键来设置主外键关系,而实际项目中,如果要是删除了主键对应的记录后...,外键表中的记录是没有删除的,这样对于数据库的数据是很容易混乱的,不便于维护,那我要是使用的是强外键的方式,这样直接删除主键记录,没有删除外键表中的记录,这样是要报错的,这样容易找到代码上的问题,外键的设计能对于数据完整性有一个好的约束...,当你开发的系统已经完全不会出现数据不完整的问题的时候,你可以考虑使用弱外键来关联表操作,也同时会省去外键消耗,具体的设置外键方法查考博客:外键及其约束理解) 4、索引设计 (对于业务上的字段,那些需要字段需要建立索引...BCNF- “每个键必须唯一标识实体,每个非键熟悉必须描述实体。” 4NF 三元关系(实体:实体:实体)。 潜伏的多值属性。(如多个手机号。) 临时数据或历史值。

    83931

    MySQL-性能优化-优化设计和设计原则

    优化设计第三步 数据库优化策略 1、选择小的数据类型 2、单独设计主键,并考虑分布式扩展 3、外键设计 (重要,我们之前开发都是直接使用的弱外键来设置主外键关系,而实际项目中,如果要是删除了主键对应的记录后...,外键表中的记录是没有删除的,这样对于数据库的数据是很容易混乱的,不便于维护,那我要是使用的是强外键的方式,这样直接删除主键记录,没有删除外键表中的记录,这样是要报错的,这样容易找到代码上的问题,外键的设计能对于数据完整性有一个好的约束...,当你开发的系统已经完全不会出现数据不完整的问题的时候,你可以考虑使用弱外键来关联表操作,也同时会省去外键消耗,具体的设置外键方法查考博客:外键及其约束理解) 4、索引设计 (对于业务上的字段,那些需要字段需要建立索引...(三)列意味着唯一的值 如果表示坐标(0,0),应该使用两列表示,而不是将“0,0”放在1个列中。 (四)列的顺序,可读性问题 (五)定义主键和外键 数据表必须定义主键和外键(如果有外键)。...汇总的数据,所引用的数据在一个完全不同的实体中。 BCNF- “每个键必须唯一标识实体,每个非键熟悉必须描述实体。” 4NF 三元关系(实体:实体:实体)。 潜伏的多值属性。(如多个手机号。)

    73820

    软考高级架构师:数据库的范式 1NF 、2NF 、3NF 和 BCNF

    外键约束 如果一个关系模式R满足BCNF,则一定满足: A. 1NF但不一定 满足2NF B. 2NF但不一定满足3NF C. 3NF和2NF D. 1NF, 2NF和3NF 在数据库设计中,范式的提升通常意味着什么...添加更多的行 B. 将复合属性分解成多个简单属性 C. 合并多个表 D. 引入外键 哪种范式要求一个表中不应存在非主属性对另一非主属性的依赖? A. 1NF B. 2NF C. 3NF D....BCNF (2)答案和解析 C. 消除了所有的部分函数依赖 解析:第一范式(1NF)的要求是确保表中的每个字段都是不可分的原子数据项,而不是消除部分函数依赖,这是第二范式(2NF)的目标。...主属性对主键有部分依赖 解析:如果一个关系模式处于3NF但不处于BCNF,可能的原因是存在主属性(组成候选键的属性)对码(主键)的部分依赖或传递依赖,BCNF要求消除这种依赖。 B....将复合属性分解成多个简单属性 解析:要将一个表设计成第一范式(1NF),必须确保表中的每个字段都是原子的,不能被进一步分解,因此需要将复合属性分解成多个简单属性。

    46800

    《深入浅出SQL》问答录(六)

    ---- Q:不能单纯的使用另一张表的键,称之为外键,而不加上约束吗? A:其实可以,但创建成外键约束后,就只能插入已经存在于父表中的值,有助于加强两张表间的连接。...如果我们试着删除主键表中的行或者是改变主键值,而这个主键是其他表的外键约束时,你就会收到错误警告。 ---- Q:所以上面说的那种,我就不能删除了是吗?...---- 花絮 数据库解析图 创建数据库的视觉解析图,在设计查询时有助于理解数据相连的方式,但模式也能以文字形式表达,看个人。...外键 外键约束 创建一张表并加上可作为外键的列虽然很简单,但除非你利用CREATE或ALTER语句来指定外键,否则都不算是真的外键。创建在结构内的外键被称为约束。...插入外键列的值必须已经存在与父表的来源中,这是引用完整性。 创建外键作为表的约束提供了明确的优势,如果违反了规则,约束会阻止我们破坏表。 外键不一定要是父表的主键,但是要具有唯一性。

    1.1K20

    原 荐 MySQL-性能优化-优化设计和设计

    3NF:属性不依赖于其它非主属性 , 消除传递依赖,如这样的设计就不合理,学号做主键,学生课程表(学号=课程),当学号修改,对应的课程表也需要修改,这就是属于传递依赖 BCNF:符合3NF,每个表中只有一个候选键...优化设计第三步 数据库优化策略 1、选择小的数据类型 2、单独设计主键,并考虑分布式扩展 3、外键设计 (重要,我们之前开发都是直接使用的弱外键来设置主外键关系,而实际项目中,如果要是删除了主键对应的记录后...,外键表中的记录是没有删除的,这样对于数据库的数据是很容易混乱的,不便于维护,那我要是使用的是强外键的方式,这样直接删除主键记录,没有删除外键表中的记录,这样是要报错的,这样容易找到代码上的问题,外键的设计能对于数据完整性有一个好的约束...,当你开发的系统已经完全不会出现数据不完整的问题的时候,你可以考虑使用弱外键来关联表操作,也同时会省去外键消耗) 4、索引设计 (对于业务上的字段,那些需要字段需要建立索引?)...BCNF- “每个键必须唯一标识实体,每个非键熟悉必须描述实体。” 4NF 三元关系(实体:实体:实体)。 潜伏的多值属性。(如多个手机号。) 临时数据或历史值。

    71640

    服务器 数据库设计技巧--1

    主键与外键的设计,在全局数据库的设计中,占有重要地位。...尽管它没有惟一的标准答案,并不意味着可以随意设计。好的E—R图的标准是:结构清晰、关联简洁、实体个数适中、属性分配合理、没有低级冗余。 ·10....以下是性能要求设计阶段需要注意的: 1、数据库逻辑设计的规范化   数据库逻辑设计的规范化就是我们一般所说的范式,我们可以这样来简单理解范式:   第1规范:没有重复的组或多值的列,这是数据库设计的最低要求...冗余可以是冗余数据库、冗余表或者冗余字段,不同粒度的冗余可以起到不同的作用。   冗余可以是为了编程方便而增加,也可以是为了性能的提高而增加。...4、外键的设计 外键作为数据库对象,很多人认为麻烦而不用,实际上,外键在大部分情况下是很有用的,理由是:   外键是最高效的一致性维护方法,数据库的一致性要求,依次可以用外键、CHECK约束、规则约束、

    1.9K40

    从 MySQL 物理外键开始的思考

    .外键等于把数据的一致性事务实现,全部交给数据库服务器完成; 3.有了外键,当做一些涉及外键字段的增,删,更新操作之后,需要触发相关操作去检查,而不得不消耗资源; 4.外键还会因为需要请求对其他表内部加锁而容易出现死锁情况...二、mysql的外键设计问题(对SQL标准的背离) 虽然很多人都不推荐你在关系型数据库使用外键。 但你更多听到的是mysql的,而不是SQLserver或者其他。...这样的后果之一是BLOB和TEXT列不被包括在一个外键中,这是因为对这些列的索引必须总是包含一个前缀长度 InnoDB不对那些外键或包含NULL列的被引用键值检查外键约束 关于对SQL标准的背离(这里只贴其中一个点...详细参考:mysql的外键约束 – Johney – 博客园(我发现他也是摘抄MySQL 5.1参考手册的) 三、不使用外键我们也有好的解决方案** 外键是个好东西,他为选择了关系型数据库的我们做了约束和级联做了保障...即使你对业务理解深刻,对外键也掌握的透彻,你也不太希望老是你管一部分他管一部分吧? 五、反对的声音 最后再来说说一些坚持用外键的思考 有人问:原本在物理外键的开销,在程序上不也有开销吗?

    3.8K20

    数据库设计中的14个技巧

    在E—R 图中, 处于叶子部位的实体, 能够定义主键, 也能够不定义主键(由于它无子孙), 但必需要有外键(由于它有父亲)。   主键与外键的设计,在全局数据库的设计中,占有重要地位。...冗余的目的是为了提高处理速度。仅仅有低级冗余才会添加�数 据的不一致性,由于同一数据,可能从不同一时候间、地点、角色上多次录入。...虽然它没有惟一的标准答案,并不意味着能够任意 设计。好的E—R图的标准是:结构清楚、关联简洁、实体个数适中、属性分配合理、没有低级冗余。    10....这些 系统的基本表完毕物理设计之后,马上在基本表上建立第一层视图,这层视图的个数和结构,与基本表 的个数和结构是全然相同。并且规定,全部的程序猿,一律仅仅准在视图上操作。...仅仅有数据库管理员,带 着多个人员共同掌握的“安全钥匙”,才干直接在基本表上操作。请读者想想:这是为什么?    11.

    42610

    第2篇:数据库关系建模

    之后,便可根据这个ER图设计相应的关系表了。 但从ER图到具体关系表的建立还需要经过两个步骤:1. 逻辑模型设计 2. 物理模型设计。...其中前者将ER图映射为逻辑意义上的关系表,后者则映射为物理意义上的关系表。逻辑意义上的关系表可以理解为单纯意义上的关系表,它不涉及到表中字段数据类型,索引信息,触发器等等细节信息。...原则上外键设在任何一个实体的关系中都OK,但如果一对一联系中的基数约束是强制单个和可选单个这种类型,则最好将外键设置在可选多的一侧。因为这样可以保证关系中不会出现太多空值。...将具有多值属性的实体映射为关系 这类映射中,需要为多值属性创建一个新的关系。新的关系中包含一个外码,对应到主实体的主码。同时属性值和外码构成新的关系的复合主码。 如下实体: ? 将映射为关系: ?...ER图是拿出去和别人谈需求的,要求各方人员都能看得懂。而关系表涉及到了过多实现细节,比如:要给多对多联系/多值属性等多建一张表,要设置外码,各种复合主码等。

    1.7K61

    多值依赖的简单理解_第四范式智能客服官网

    在函数依赖中,X与Y是否存在函数依赖关系,只需考察X,Y的两组属性,与别的属性无关。而在多值依赖中,X与Y是否存在多值依赖还需看属性Z。 1.2 数学定义:设R(U)是属性集U上的一个关系模式。...>有一个仓库号,而实际上,这个仓库号只与库存产品号有关,与管理员无关,就说这是多值依赖。...3.定义对解:定义和实例对比解析 3.1 多值依赖:设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。...为什么会产生这个多值依赖呢? 因为工厂,只有代理商A1销售Car ,但是这里却又两个工厂生产Car ,说以导致了Car和A1的关系冗余。这就是数据表的设计问题的体现。消除多值依赖也很简单。...产品(X) 代理商(Y) 工厂(Z) Car A1 F1 Car A1 F2 Bus A2 F2 “R中的每个属性Ai(i-1,2,…,n)存在有函数依赖X→Ai(X必包含键) ”,将这个要求,针对当前表展开

    90820

    数据库设计范式2——BC范式和第四范式

    这是我们设计数据库的基本规则,但是只有这三个规则并不能完全解决数据的增删改的异常情况,下面就来看看BC范式的例子。...BC范式 BC范式(BCNF)是Boyce-Codd范式的缩写,其定义是:在关系模式中每一个决定因素都包含候选键,也就是说,只要属性或属性组A能够决定任何一个属性B,则A的子集中必须有候选键。...BCNF范式排除了任何属性(不光是非主属性,2NF和3NF所限制的都是非主属性)对候选键的传递依赖与部分依赖。...除了第四范式外,我们还有更高级的第五范式和域键范式(DKNF),第五范式处理的是无损连接问题,这个范式基本没有实际意义,因为无损连接很少出现,而且难以察觉。...而域键范式试图定义一个终极范式,该范式考虑所有的依赖和约束类型,但是实用价值也是最小的,只存在理论研究中。

    1.4K31

    数据库系统:第六章 关系数据理论

    数据依赖 数据依赖: 一个关系内部属性与属性之间的约束关系,现实世界属间相互联系的抽象,数据内在的性质,语义的体现(表示的谁可以决定谁的关系,是由现实世界决定的关系,比如身份证号确定一个人的其他属性,这是有现实语义决定的...上述的关系模式不是一个好的关系模式。这是由存在于模式中的某些数据依赖引起的,可以通过分解关系模式来消除其中不合适的数据依赖。...语义范畴的概念,只能根据语义来确定,但是数据库设计者可以对现实世界作强制的规定(如用名字->年龄,同时强制规定不会有同名人),并且 这是所有关系实例均要满足的约束条件。 2....wp_editor_md_69d06162a5c5c0df606c55bd3cd55fd4.jpg 如图的表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。...若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。 ⽐如在设计⼀个订单数据表的时候,可以将客户编号作为⼀个外键和订单表建⽴相应的关系。

    1.3K10

    一文彻底解析数据库设计思路

    一文彻底解析数据库设计思路 目录 博主介绍 实体关系(Entity-Relationship, E-R)概念 E-R 模型 实体 (Entity) 属性 (Attribute) 联系(Relationships...若 max_card(F, R) = 1,并且 F 为联系中的多方, 那么从实体 F 转换出的关系表 T 中包括从 E 转换出的关系表的主键属性列, 这被称为 T 的外键(可以简单理解为表的一列是另一张表的主键...规则五&六: 1-1 Relationships 有一侧是可选参与 若两张表都是可选参与: 选一张表插入另一张表的主键属性列作为外键; = 若有一张表是强制参与: 在强制参与的实体表中添加外键列(...在 1NF 的基础上, 消除了非主属性对于键(指候选键)的部分函数依赖 判断方法: 找出表中所有非主属性 查看是否存在有非主属性对键的部分函数依赖, 若无, 则符合 2NF 修改为符合 2NF: 将数据表拆分成含有较少字段的表...>系主任的依赖, 继续将这张表拆分: BCNF 基于 3NF, 更加严格 在 3NF 基础上消除主属性对候选键的部分依赖和传递依赖 来几个练习题: R(A,B,C), F={AB->C} 候选键:

    1.1K20

    【愚公系列】软考高级-架构设计师 054-数据库模型

    它是基于实体-联系模型(ER模型)转换而来的,通过开发人员的设计,将概念模型转化为可以在关系数据库管理系统中实现的结构。 关系模型强调用表结构来表示实体及其关系,适用于复杂的查询操作。...这些约束条件可以包括实体完整性约束(如主键约束、唯一约束)、参照完整性约束(外键约束)、域完整性约束(数据类型、范围约束)等。...属性: 实体所具有的特性,描述实体的特征。 属性分类包括:简单属性和复合属性;单值属性和多值属性;NULL属性;派生属性。 域: 属性的取值范围称为该属性的域。...4.二维表 在关系模型中,数据的逻辑结构是一张二维表,由行列组成,用表格结构来表达实体集,并通过外键来标识实体间的联系。 优点: 建立在严格的数学概念基础上。...由于E-R图是一种全局设计概念,不适合直接用于计算机处理,因此必须将其转换为关系模型。 E-R图由实体、属性和联系三要素组成,而关系模型则具有更简单的结构。

    14421

    第11章_数据库的设计规范

    解决办法是我们把这个多值依赖的表拆解成 2 个表,分别建立关系。这是我们拆分后的表: 以及 # 6....第五范式、域键范式 除了第四范式外,我们还有更高级的第五范式(又称完美范式)和域键范式(DKNF)。 在满足第四范式(4NF)的基础上,消除不是由候选键所蕴含的连接依赖。...如果关系模式 R 中的每一个连 接依赖均由 R 的候选键所隐含,则称此关系模式符合第五范式。 函数依赖是多值依赖的一种特殊的情况,而多值依赖实际上是连接依赖的一种特殊情况。...而域键范式试图定义一个 终极范式 ,该范式考虑所有的依赖和约束类型,但是实用价值也是最小的,只存在理论研究中。 # 7....实体 通常转换成一个 数据表 ; (2)一个 多对多的关系 ,通常也转换成一个 数据表 ; (3)一个 1 对 1 ,或者 1 对多 的关系,往往通过表的 外键 来表达,而不是设计一个新的数据表; (4

    52750

    关系模型的相关术语

    ,表示为:关系名(属性列表) 例如:学生(学号,姓名,性别,年龄,系别 关系的约束:域完整性约束, 实体完整性约束,参照完整性约束 一、关系依赖 函数依赖:X—>Y,即X函数决定Y,或Y函数依赖于...多值依赖:X—>—>Y,设R(U)是属性集U上的一个关系模式。...X,Y,Z是U的子集,并且Z=U-X-Y,关系模式R(U)中多值依赖X—>—>Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值有一组Y的值,这组值仅仅决定于x值而与z值无关。...平凡的多值依赖:若X—>—>Y, 并且X,Y,Z是U的子集,Z=U-X-Y,而Z为空集,则称X—>—>Y为平凡的多值依赖; 非平凡的多值依赖:若X—>—>Y, 并且X,Y,Z是U的子集,Z=U-X-Y,...规范程度层次:5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF 三、“好的”关系数据库系统应具有的特点 适度减少数据冗余。 关系明确,表与表之间主外键设置明确,表名称明确。

    1.1K10

    关系模型由浅及深讲解【数据库概论】

    (集)上取值不同 构成候选键的属性(集)的值对于关系的所有实例都具有惟一性,而不是只针对某一个实例 通常在关系模式中在构成候选键的属性(集)下面画下划线,来表明它是键的组成部分 学生(姓名,性别,年龄)...,并做主键 选课关系中的学号和课程号,分别代表选课关系到外键,他们分别对应学生关系的学号和课程关系的课程号(不一定要同名,但是为了好理解,一般写成同名,回过头看上面的概念) 模拟了几张简单的表,给大家直观的理解...是针对系统中定义的基本关系(存储的关系表)而言的,并不对查询的结果关系(临时表)、视图等进行约束。 如果关系的候选键由若干属性组成,则所有构成候选键的属性即主属性都不能为空。...(3) 参照完整性 在关系模型中实体以及实体间的联系都是用关系来描述的 关系之间的参照一般通过外键来描述,并遵循如下约束规则 参照完整性规则: 若属性(或属性集)F是关系R的外键,它与关系S的主键Ks...提出的,在约克镇IBM高级研究实验室为图形终端用户设计的一种域演算语言,1978年在IBM370上实现。

    1.8K30

    数据库对象命名参考

    虽然这篇文章名为“数据库对象命名参考”,实际上,在这篇文章不仅介绍了数据库命名的规则,连带讲述了在数据库设计与开发时所需要注意的几个问题。...之所以这样,是因为在语言(比如C#)中创建对象时,有时候会使用代码生成器(根据数据库的字段名生成对象的字段、属性名),此时生成的代码更规整一些。...建表时需要注意的问题 数据库不仅是用来保存数据,还应负责维护数据的完整性和一致性 我看过很多的开发人员设计出来的数据库,给我的感觉就是:在他们眼里,数据库的作用就如同它的名称一样――仅仅是用来存放数据的...外键的命名 外键的命名为 fk_外键所在的表名_外键引用的表名。因为外键所在的表为从表,所以上式可以写为 fk_从表名_主表名。 外键包含的字段的命名,外键包含的字段和外键是完全不同的概念。...而对于多对多关系中解析表的外键包含的字段,顺理往下推,我们可以这样写(再次回到学生选课的多对多例子中): 建立解析表StudentCourse与Student表的外键关系: Alter Table StudentCourse

    95720
    领券