`

DBMS里的一些"自圆其说"(2)

阅读更多
DBMS里的一些"自圆其说"(2)

书接前回,上次提出了这样的问题:对于USERS和BILLING_DETAILS两个表,为什么非要把"USER_ID varchar(15) foreign key references USERS"放在BILLING_DETAILS表里?反过来行不行?也就是说在USERS表里加这个语句BILLING_DETAILS_ID foreign key references BILLING_DETAILS来替代.

这样的替代在语法上绝对没问题,那为什么不替代呢?替代了后会有什么不良后果呢?

我觉得这得从实际情况说起.

在实际生活中,USERS表所对应的Object是行动的主体,而BILLING_DETAILS所对应的Object完全处于从属关系.也就是说User可以有BILLING_DETAIL,也可以没有,若没有BILLING_DETAIL,一个User作为Object存在还是有意义的,这样的有意义反映有表间关系上就是在BILLING_DETAILS表里USER_ID要去references USERS;再反过来看时若用BILLING_DETAILS_ID foreign key references BILLING_DETAILS这样的引用关系,就是说BILLING_DETAILS表所对应的Object是主体了,一个BILLING_DETAIL可以不User也可以没有User,这样大多数情况下是不成立的.毕竟User的人是万物之首嘛,再说现在是Billing_Detail,也只有人才会发生这个Billing,从这个Billing身上也看出来那种正常的references关系.其实若仔细想想,那些少数的情况也是很容易找到的,仓库管理时的物件是以自身为主体了.



说了半天,现在更明白一点了:表间关系是整个软件系统所描述对象的映射,只不过在由DBA做这种映射处理时会根据实际情况(对象间关系的侧重点,查询性能优化...)translate成DDL的不同描述而已.

这也是传统的Buttom-up的软件建模情景,现在有了OO后,再加上Persistence的自动建表功能,是不是DBA的工作就被取代了呢?或在Persistence自动建表完成后,DBA再审查下,做下Tuning?
分享到:
评论

相关推荐

    DBMS_XMLDOM DBMS_XMLPARSER DBMS_XMLQUERY 文档

    Oracle数据库系统提供了强大的XML处理能力,这主要体现在其内置的几个PL/SQL包上,如DBMS_XMLDOM、DBMS_XMLPARSER和DBMS_XMLQUERY。这些包为开发者提供了处理XML文档的一整套工具,使得在数据库环境中进行XML数据的...

    DBMS_dbms_javascript_

    【DBMS_dbms_javascript_】这一主题涵盖了数据库管理系统(DBMS)与JavaScript在交互和数据处理中的应用。JavaScript,作为一种广泛使用的客户端脚本语言,不仅限于网页开发,也日益成为服务器端和数据库交互的重要...

    dbms源码课程设计

    例如,“DBMS1.C”可能包含了基本的数据操作和事务处理,而“DBMS2.C”可能包含了索引构建和查询优化的代码。通过分析和理解这些源码,你可以深入学习DBMS的工作原理,并提升你的编程技能。同时,这样的课程设计对于...

    oracle dbms_lob

    2. **读取LOB**: - `GET_LENGTH`:返回LOB的长度。 - `GET_SUBSTRING`:提取LOB中的子字符串或字节序列。 - `FETCH`:从BFILE或CLOB中读取数据。 3. **写入LOB**: - `APPEND`:将数据追加到现有LOB的末尾,常...

    DBMS

    2. MENU.CPP:这部分可能实现了用户界面的菜单系统,让用户能够交互式地访问和操作数据库。 3. MYFUNC.CPP:这是一个自定义函数库,可能包含了一些特定的数据处理或业务逻辑函数。 4. Dbms.exe:这是编译后的可执行...

    DBMS_SQL的使用

    INSERT INTO demo VALUES (ROUND(DBMS_RANDOM.VALUE, 2) * 100, ROUND(DBMS_RANDOM.VALUE, 2) * 100, ROUND(DBMS_RANDOM.VALUE, 2) * 100); END LOOP; COMMIT; END; ``` 这段代码创建了一个名为`demo`的表,并...

    DBMS系统架构 ppt

    数据库管理系统(DBMS)是计算机科学中的核心组成部分,它负责管理和操作数据的存储、检索、更新和删除。在本系列的PPT中,我们将深入探讨DBMS系统架构的多个关键方面,包括其基本概念、数据存储、数据表示、索引...

    DBMS系统实现——C语言

    2. 存储管理:C语言的文件操作接口被用来持久化数据库。这包括读取、写入和追加数据到磁盘文件,通常采用二进制文件格式以提高效率。 3. 查询解析:C语言实现的DBMS需要一个解析器来处理SQL查询语句。解析器将SQL...

    DBMS的设计与实现

    2. **SQL处理**:SQL(Structured Query Language)是用于查询、插入、更新和删除数据库中数据的标准语言。我们的系统需要解析SQL语句,这涉及词法分析(将输入分解为单词或标记)和语法分析(将标记序列转换为抽象...

    DBMS_c.rar_C语言实现DBMS_DBMS_c_c语言DBMS_dbms

    在 C 语言实现的 DBMS 中,以下是一些关键知识点: 1. **数据模型**:首先,理解数据是如何组织的至关重要。C 实现的 DBMS 可能基于关系模型,其中数据以表格的形式存储,每个表由一系列列组成,列之间可能存在特定...

    dbms.rar_DBMS visual c++_DBMS Visual C++_c dbms_dbms

    文件DBMS1.C和DBMS2.C是该系统的源代码文件。在C语言中,.C文件通常包含函数定义、变量声明和其他编程元素,用于构建可执行程序。我们可以假设这两个文件分别包含了DBMS系统的核心功能和辅助功能,例如数据存储、...

    DBMS.rar_dbms_dbms举例_dbms有什么例子

    "DBMS"文件可能是一个数据库实例,包含了一些实际的数据表和查询,用于演示如何在实际环境中操作DBMS。例如,它可能展示了如何创建数据库,定义数据表结构,插入记录,执行查询,以及如何实现数据完整性,如实体完整...

    用C++编写的DBMS

    在IT领域,数据库管理系统(DBMS)是至关重要的软件组件,用于存储、管理和检索数据。本文将深入探讨一个使用C++编程语言实现的DBMS,这对于C++初学者或者对数据库系统感兴趣的开发者来说是一个很好的学习资源。 ...

    使用dbms_stats包手工收集统计信息

    Oracle 数据库中使用 dbms_stats 包手动收集统计信息 在 Oracle 数据库中,dbms_stats 包提供了一种手动收集统计信息的方式,包括基于表、用户和索引的统计信息。通过使用 dbms_stats 包,我们可以手动收集统计信息...

    DBMS2.rar_c语言 数据库_dbms

    5. **数据完整性**:为了确保数据的准确性和一致性,DBMS2可能会包含一些约束,如主键约束、外键约束等,防止非法数据的插入。 6. **SQL支持**:虽然可能不是完整的SQL标准,但这个小型DBMS可能会支持一些基础的SQL...

    经典DBMS 课程设计

    经典DBMS课程设计 DBMS(Database Management System,数据库管理系统)是计算机科学系的重要组成部分,本篇课程设计旨在实现一个经典的miniDBMS系统,提供了CREATE SCHEMA、CREATE TABLE、INSERT、SELECT、DROP ...

    C++ 编写的小型DBMS

    2. **查询解析**:DBMS的核心之一就是解析SQL查询语句。C++可以通过字符串处理和正则表达式库来解析SQL命令,将其转化为可执行的操作。对于简单的SELECT、INSERT、UPDATE和DELETE操作,可以设计对应的解析器实现。 ...

    自己做的简单的DBMS

    数据库管理系统(DBMS)是计算机科学中的一个关键领域,它是一种用于存储、管理和检索数据的软件系统。在本文中,我们将深入探讨一个简单的DBMS,它由个人制作,主要功能包括基本的增删改查操作。 一、数据库管理...

    DBMS.rar_dbms_dbms过代码

    2. **数据模型**:DBMS通常基于不同的数据模型,如关系型数据模型(Relational)、对象-关系数据模型(Object-Relational)、网络数据模型(Network)和层次数据模型(Hierarchical)。在描述的源代码中,考虑到其...

    dbms_stats.docx

    ##### 2. Estimate_Percent选项 Estimate_Percent参数用于指定收集统计数据时对表或索引段进行采样的百分比。该参数支持一个特殊值`DBMS_STATS.AUTO_SAMPLE_SIZE`,表示让Oracle自动计算最佳的采样比例。通过这种...

Global site tag (gtag.js) - Google Analytics