数据建模(一) 域

目录

一、什么是域

二、域的分类

三、域的作用

        


一、什么是域

        谈起域,我们首先应该理解属性的含义。属性是实体或关系的特征或性质,属性是一则相对独立的信息,其值用以识别、描述、评估实体实例。例如:属性'身份证号'可以识别我们的身份,属性'学号'用于描述学生所属院系,属性'销售总额'用于评估交易中的财政收入。

以电子表格为例,电子表格中的列标题就是属性。每个列标题下方一个单元格用来存储相应属性的值。我们可以将电子表格中的列标题、表单中的域、报表中的标签都理解为属性。比如个人名片,名片上的姓名、工作单位、联系方式作为属性。

        那么域又如何解释呢,属性域是某一属性所有可能取值的集合。域中往往还包含 一组验证标准,使得域可以被多个属性使用。例如,“日期”域中包括所有的合法日期,它可以应用以下这些属性。

  • 员工入职日期
  • 订单日期
  • 课程开设日期

         如果属性与域相关联,那么该属性的取值觉得不允许超出该域,域中的值可以由一组特定的数据列表指定,也可以指定一组规则来约束。例如,’性别‘,取值为’男‘和’女‘的域限定。’员工入职日期‘如果指定规则为’合法日期‘,那么可能取值如下:

  • February 30th, 2021
  • 2011年8月13日
  • 20220101
  • 20550827 

        由于员工入职日期被设定为一个合法日期,故 February 30th, 2021会被排除。再此基础上,限制员工入职日期早于今天,那么20550827也被排除了。如果设置日期格式满足'YYYYMMDD',那么2011年8月13日被排除。此外可以指定入职日期必须在工作日之内,那么对于属性值约束会更加严格。

二、域的分类

 (一)格式域

格式域将数据指定为数据库中的标准类型,如整型、字符型、日期型等

 (二)列表域

列表域类似于一个下拉列表,它由一个可选的有限值的集合组成,列表域是格式域的精简,如"订单状态"的格式域可以被设置为varchar(10),在此基础上该域可以由(open, shipped,  closed,  returned)列表域进一步精简。

 例如:使用ENUM类型设置列表域

CREATE TABLE orders (
   id INT AUTO_INCREMENT PRIMARY KEY,
   order_status ENUM('open', 'shipped', 'closed', 'returned')
);

    (三)  范围域

范围域的设置要求取值介于最小值和最大值之间,例如"工程交付日期"设定为今天到今年年底。与列表域相似,范围域是格式域的进一步精简。

设置范围域可以使用设置属性类型,如INT 指定存储整数范围,DECIMAL 设置小数位数,精确小数范围。 日期/时间类型设置日期格式来满足实际需求。

此外可以使用CHECK约束来设置范围域

CREATE TABLE 表名 (
   age int,
   name varchar(10),
   CONSTRAINT check_age CHECK (age > 18 AND age < 60)
);

三、域的作用

        ① 插入数据前,通过域的检查来提高数据质量。这是属性域存在的主要原因,通过限定属性的可能取值来降低脏数据进入数据库的可能性。例如,每一个表示金额的属性被设置为“数量域”, 该域要求数字的长度上限为15且包括小数点后的两位,显然这是表示货币数额很好的一种方法,“销售总额”若被设置为“数量域”, 则不允许其他格式的值被添加。

        ② 数据模型的交流性更强。 当我们在数据模型上设置了域, 就意味着数据模型的一个属性必须具备一个特定域的特征,这样数据模型就变成更容易被理解的交流工具。 例如,我们可以让“销售总额”、“净销售额”、“标价销售额” 3个属性都可以共享同一个“数据域”,进而共享域的特征,他们的取值都被限定为货币。

        ③ 使得新建模型、维护现有模型变得更有效率。当开始一项新工程时,可以使用一组标准域来节省时间,而无需重新创建。例如,所有与数量有关的属性,都可以同时与数量域关联,这样可以极大节省分析、设计时间。

        看到这里,心中否浮现一个问题, 如果我们要做增删改查,既然可以通过设置域的方式来筛选满足要求的元素,相比使用JDBC来筛选数据,这两者方式哪种效率更高呢?

1. 在MySQL中直接写约束:

  • 数据一致性: 通过在MySQL中定义约束,可以确保数据的一致性和完整性。MySQL约束可以限制列或表级别的数据输入条件, 例如主键、唯一约束、值非空等。这样,当添加新数据时, MySQL会自动检查并拒绝违反约束条件的操作。
  • 性能优化: MySQL的查询优化器可以针对约束条件进行优化,并利用合适的所以来加速查询过程。约束可以帮助数据库有效地执行查询,提高查询性能。

2. 使用JDBC筛选满足要求的元素并添加到数据库:

  • 灵活性: 使用JDBC可以根据具体的业务需求编写筛选逻辑, 可以更灵活地进行筛选和处理数据。这种方法适用于一些复杂的筛选逻辑, 需要在JAVA代码层面进行处理的情况。
  • 可扩展性: 通过使用JDBC, 可以将筛选逻辑和数据处理集成到应用程序中。这样可以灵活地扩展逻辑和数据流,并根据需求进行定制化处理。

   综上所述,如果注重数据一致性和完整性,并且希望通过约束来优化查询性能,那么在MySQL中直接写约束是更好的选择。然而,如果需要灵活地进行筛选和处理数据,并将筛选逻辑集成到应用程序中,那么使用JDBC进行筛选是更适合的方法。

        上述内容如果有错误的地方,希望大佬们可以指正。我一直在学习的路上,您的帮助使我收获更大!觉得对您有帮助的话,还请点赞支持!我也会不断更新文章!

 参考文献:

数据建模经典教程 : 第二版 Steve Hoberman(著) 人民邮电出版社 2017.6

        

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弘弘弘弘~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值