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

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

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

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

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

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

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

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

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

相关·内容

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

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

87170

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

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

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

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

    83031

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

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

    73720

    软考高级架构师:数据库范式 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),必须确保每个字段都是原子,不能被进一步分解,因此需要将复合属性分解成多个简单属性

    32400

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

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

    1.1K20

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

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

    71540

    服务器 数据库设计技巧--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.

    42010

    第2篇:数据库关系建模

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

    1.6K61

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

    在函数依赖中,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必包含) ”,将这个要求,针对当前展开

    85820

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

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

    1.3K31

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

    数据依赖 数据依赖: 一个关系内部属性属性之间约束关系,现实世界属间相互联系抽象,数据内在性质,语义体现(表示谁可以决定谁关系,是由现实世界决定关系,比如身份证号确定一个人其他属性这是有现实语义决定...上述关系模式不是一个关系模式。这是由存在于模式中某些数据依赖引起,可以通过分解关系模式来消除其中不合适数据依赖。...语义范畴概念,只能根据语义来确定,但是数据库设计者可以对现实世界作强制规定(如用名字->年龄,同时强制规定不会有同名人),并且 这是所有关系实例均要满足约束条件。 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} 候选:

    1K20

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

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

    13521

    第11章_数据库设计规范

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

    49450

    关系模型相关术语

    ,表示为:关系名(属性列表) 例如:学生(学号,姓名,性别,年龄,系别 关系约束:域完整性约束, 实体完整性约束,参照完整性约束 一、关系依赖 函数依赖: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

    数据库对象命名参考

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

    94520

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

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

    1.7K30
    领券