精华内容
下载资源
问答
  • 数据库实体联系模型与关系模型

    千次阅读 2020-03-02 19:11:33
    数据库设计是指根据用户的需求,在某一具体...这就需要规划课程、学生、老师、学习资料等数据构成以及相互之间关系。因此,规划数据构成及数据间关系,并应用某一具体的数据库管理系统如MySQL构建数据库的过程就是...

    数据库设计是指根据用户的需求,在某一具体的数据库管理系统上,设计数据库的结构和建立数据库的过程。例如,编程微课是在线编程教育项目,该项目涉及到课程、学生、老师、学习资料等数据,这些数据都要被存储下来,并且能够方便的增加、修改、删除和查询。这就需要规划课程、学生、老师、学习资料等数据构成以及相互之间的关系。因此,规划数据构成及数据间关系,并应用某一具体的数据库管理系统如MySQL构建数据库的过程就是数据库设计。

    由于项目需求的易变性和数据的复杂性,数据库设计不可能一蹴而就,而只能是一种“反复探寻,逐步求精”的过程。数据库设计步骤如下图所示:

     

     

                                           

                                                                    图2-5 数据库设计过程流程图

     

    需求分析阶段主要分析项目涉及的业务活动和数据的使用情况,弄清所用数据的种类、范围、数量以及在业务活动中的存储情况,确定用户对数据库系统的使用要求和各种约束条件等,形成数据库需求说明书

    概念结构设计阶段根据数据库需求说明书,创建数据库概念结构,描述概念结构的有力工具是ER模型

    ER模型表示的概念结构模型独立于任何一种数据模型,并独立于任何一个具体的数据库管理系统。因此,需要把概念结构设计阶段设计的ER模型转换为关系数据模型二维表结构,此阶段为逻辑结构设计阶段

    物理设计阶段是在计算机的物理设备上确定应采取的数据存储结构和存取方法,以及如何分配存储空间等问题。关系数据库物理设计的主要工作是由系统自动完成的,数据库设计者只要关心索引文件的创建即可

    验证设计是在上述设计的基础上,收集数据并建立数据库,运行应用任务来验证数据库的正确性和合理性,当发现设计问题时,可能需要对数据库设计进行修改。

     

    实体联系模型(ER图)

    当前常用的概念数据模型是ER模型。ER模型描述数据库的概念模式,不考虑数据库的逻辑与物理结构,它充分反映现实世界,易于理解,将现实世界的事物以信息结构的形式很方便地表示出来。

    例如,课程是编程微课的主要内容,课程涉及到老师、学生等对象等实体,进一步分析还涉及到课程视频、课程资料、课程价格等各种数据。在用ER模型对课程分析和描述中,对这些实体以及实体之间的联系给出了确切的定义。

    ER模型有四个概念,分别是实体、属性、联系、实体集

     

    实体

    实体是客观存在并且可以互相区分的事物,可以是人或物,也可以是抽象的概念。在现实世界,实体并不是孤立存在的,实体与实体之间也存在联系。例如,课程与学生之间存在学生学习课程的联系,课程与老师之间存在老师创建课程的联系。

     

    属性

    每个实体具有的特征称为属性,一个实体可以由若干属性来描述,属性都有其取值范围,称为值集或值域。例如,课程实体可以由课程编号、课程名称、授课老师、类别、简课程介、价格等属性组成。唯一地标识实体的属性或属性组称为实体的关键字。例如,属性值“20180603,Java编程基础,郎老师,编程语言,课程以浅显易懂的语言,以常见的生活场景为案例,带领大家逐步进入计算机编程世界,86”。其中20180603是课程编号的属性值,该编号在在所有的课程实体中是唯一的,该属性就是课程实体的关键字。

     

    联系

    实体不是孤立存在的,实体之间是有联系的。实体之间的联系可以分为三类:一对一(1:1)、一对多(1:n)和多对多(m:n)。例如,一个老师可以创建多个课程,老师与课程的联系就是一对多的;如果一个老师只能创建一个课程,则老师和课程的联系就是一对一的。在进行问题分析时,要根据客观实际,抓住问题实质进行现实世界的抽象

     

    实体集

    具有相同属性的实体的集合称为实体集。在同一实体集中,每个实体的属性及其值域是相同的,但可能取不同的值。例如,所有的课程实体组成课程实体集,所有的老师实体组成老师实体集。

     

    绘制ER图

    ER图是ER模型的图形化描述。俗话说:一张图胜过千言万语,用ER图可以清晰地描述出ER模型的结构。

    规范的ER图可以帮助人们对ER模型的统一认识,便于沟通和讨论,有助于工作效率的提高。它使用一组预定义的符号来表示ER模型的实体、属性、联系等概念,这些预先定义的符号已经标准化,从而让全世界的开发人员都可以采用这些符号而不会引起混淆。ER图的基本图素有如下的约定:

     

                           

                                                                              图 2-6 ER图的基本图素

    (1)用长方形表示实体,在框内写上实体名。

    (2)用椭圆表示实体的属性,并用连接线把实体与属性连接起来,属性如果是实体的关键字,可以用双线椭圆表示。

    (3)用菱形表示实体间的联系,菱形内写上联系名,用连接线把菱形分别与有关的实体相连接,在连接线旁标上连接的类型,如果联系也有属性,则联系的属性和菱形连接。

     

                                            

                                                                            图 2-7 用ER图表示的课程管理

    图2-7所示为用ER图表示一个课程管理,这是一个简化的课程管理模型,课程由老师创建并属于老师,两者之间是一对多的联系。课程与学生直接存在学习的联系,课程与学生是多对多的联系,因此联系也有属性,分别是学生编号和课程编号。双线椭圆表示的属性编号是实体的关键字。

    通过图2-7可以看出,ER模型是依赖业务运营方式的,它是企业运营方式的信息化描述。企业业务的改变直接影响着ER图的结构和实体间的联系。即使是相同的业务,数据库设计人员侧重分析的数据不同,给出的ER图也可能是不同的。

    对于设计比较复杂的系统来说,有时为了使ER图简洁明了,在ER图中可以省略属性,只画出实体和联系,将属性以表格的形式另外列出。如图2-8所示,给出的是不包含属性的ER图,

     

                                                    

                                                                     图 2-8 不包含属性的课程管理ER图

    ER图直观易懂,是系统开发人员和客户之间很好的沟通工具。对于客户来说,它概况了企业运营的方式和各种联系;对于系统开发人员来说,它从概念上描述了一个应用系统数据库的信息组织。因此,如能准确画出企业运营方式的ER图,就意味着搞清楚了企业的业务运营方式,以后可以根据ER图,结合具体的数据库管理系统,把ER图转换为数据库管理系统所能支持的数据模型。这种逐步推进的数据库设计方法已经普遍应用于数据库设计中,画出应用系统的ER图成为数据库设计的一个重要步骤。

     

    关系模型

    ER图给出了实体联系模型的图形化描述,增强了开发人员与客户的沟通能力。在需求开发阶段ER模型是非常重要的,也是从企业的业务运营方式到概念模型的映射。

    到了设计阶段。就需要在概念模型的基础上建立关系模型,关系模型是用二维表来表示实体集属性间的关系以及实体间联系的形式化模型。它将用户数据的逻辑结构ER模型归纳为满足一定条件的二维表的形式。

    ER模型中的一个实体或联系对应一张二维表,ER模型中的实体属性转换为二维表的列,也可称为属性,每个属性的名称称为属性名,也可称为列名。每个属性取值范围称为该属性的域。二维表每个属性或列取值后的一行数据称为二维表的一个元组,也可以称为一条记录。二维表可以包含有限个不重复的记录。

    图2-9给出了实体“课程”、“老师”转化为关系模型的二维表。每个课程是课程表中的一条记录或一个元组,即一行;同样,每个老师的属性也反映在老师表中的一行;课程表和老师表的联系反映在课程表属性“老师编号”字段上,该字段和老师表的编号字段为同一个字段,因此通过“老师编号”字段可以确定是哪位老师建立的课程。

     

                               

                                                                   图 2-9 由实体课程和老师转化的课程和

    二维表的不可重复性可知,关系中必然存在一个属性或属性组,能够唯一标识一个元组,该属性或属性组称为关键字。当关系中存在多个关键字时,称它们为候选关键字,指定其中一个为主关键字,简称主键。

    设计二维表时,关系应满足如下性质。

    (1)表中每一列的取值范围都是相同的,也就是数据类型相同。

    (2)不同列的取值范围可以相同,但列名称不能相同。

    (3)表中列的次序可以变换,不影响关系的实际意义。

    (4)同一个表中,不允许存在两个完全相同的元组,这是集合的一个基本性质,保证了关系中元组的唯一性。

    (5)行的次序可以任意交换。

    (6)关系中的任何一个属性值都必须是不可分的元素。

    展开全文
  • 实体与实体之间关系Note: This article is part of the advanced Room series which covers all the details about the Room persistence library. You can read all the articles here: 注意:本文是高级Room系列...

    实体与实体之间的关系

    Note: This article is part of the advanced Room series which covers all the details about the Room persistence library. You can read all the articles here:

    注意:本文是高级Room系列的一部分,该系列涵盖有关Room持久性库的所有详细信息。 您可以在此处阅读所有文章:

    房间中的实体关系 (Entity Relationships in Room)

    This article covers how we can define relationship between entities in Room persistence library.

    本文介绍了如何在Room Persistence库中定义实体之间的关系。

    Since SQLite is a relational database, entities can have relationships between them. In Room, entities cannot directly reference other entities because it might cause loading unnecessary data every time.

    由于SQLite是一个关系数据库,因此实体之间可以具有关系。 在Room中,实体无法直接引用其他实体,因为这可能会导致每次加载不必要的数据。

    Still sometimes, you would want to reference other entities from your entity. You can acheive this in multiple ways.

    有时,您仍想从您的实体中引用其他实体。 您可以通过多种方式来实现。

    嵌入式对象 (Embedded Objects)

    You can use the @Embedded annotation to represent an object that you'd like to decompose into its subfields within a table(entity). You can then query the embedded fields just as you would for other individual columns.

    您可以使用@Embedded批注表示要分解为表(实体)内其子字段的对象。 然后,您可以查询嵌入字段,就像查询其他各个列一样。

    Embedded fields can also include other embedded fields.

    嵌入式字段也可以包括其他嵌入式字段。

    data class Address(
        val street: String?,
        val state: String?,
        val city: String?,
        val postCode: Int
    )
    
    
    @Entity
    data class User(
        @PrimaryKey val id: Int,
        val firstName: String?,
        @Embedded val address: Address?
    )

    The table representing a User object then contains columns with the following names: id, firstName, street, state, city, and postCode.

    然后,代表User对象的表包含具有以下名称的列: idfirstNamestreetstatecitypostCode

    If an entity has multiple embedded fields of the same type, you can keep each column unique by setting the prefix property. Room then adds the provided value to the beginning of each column name in the embedded object.

    如果一个实体具有多个相同类型的嵌入字段,则可以通过设置prefix属性来使每一列保持唯一。 然后,Room将提供的值添加到嵌入对象中每个列名称的开头。

    In the above example, fields of an object are decomposed into an entity. In case you want to represent relationship between multiple entities, you cannot use the @Embedded annotation.

    在上面的示例中,对象的字段被分解为实体。 如果要表示多个实体之间的关系,则不能使用@Embedded批注。

    You can use either @Relation annotation or foreignkeys parameter of @Entity annotation for defining relationship between two entities. Both of them are different from each other in such a way that @Relation annotation can only be applied on a non-entity class whereas ForeignKey is used on an entity class. Also, ForeignKey affects the schema of an entity that requires that the child column(s) exist in the parent column(s). @Relation is used to join the tables without affecting the schema of tables.

    您可以使用@Relation批注或@Entity批注的foreignkeys参数来定义两个实体之间的关系。 两者彼此不同,因此@Relation批注只能应用于非实体类,而ForeignKey用于实体类。 另外, ForeignKey影响实体的架构,该实体要求在父列中存在子列。 @Relation用于连接表而不影响表的架构。

    You can define relationship between entities in 3 ways:

    您可以通过3种方式定义实体之间的关系:

    • One-to-one relationship

      一对一关系
    • One-to-many relationship or Many-to-one relationship

      一对多关系或多对一关系
    • Many-to-many relationship

      多对多关系

    一对一关系 (One-to-one relationships)

    A one-to-one relationship between two entities is a relationship where each instance of the parent entity corresponds to exactly one instance of the child entity, and vice-versa.

    两个实体之间的一对一关系是一种关系,其中父实体的每个实例恰好对应于子实体的一个实例,反之亦然。

    For example, consider a music streaming app where the user has a library of songs that they own. Each user has only one library, and each library corresponds to exactly one user.

    例如,考虑一个音乐流应用程序,其中用户拥有自己拥有的歌曲库。 每个用户只有一个库,每个库恰好对应一个用户。

    @Entity
    data class User(
        @PrimaryKey val userId: Long,
        val name: String,
        val age: Int
    )
    
    
    @Entity(foreignKeys = @ForeignKey(entity = User.class,
                                      parentColumns = "userId",
                                      childColumns = "userOwnerId",
                                      onDelete = CASCADE))
    data class Library(
        @PrimaryKey val libraryId: Long,
        val title: String,
        val userOwnerId: Long
    )
    
    
    data class UserAndLibrary(
        @Embedded val user: User,
        @Relation(
             parentColumn = "userId",
             entityColumn = "userOwnerId"
        )
        val library: Library
    )

    In the above example, User and Library are the entities which have one-to-one relationship. One of the entities must include a variable that is a reference to the primary key of the other entity(userOwnerId in Library entity).

    在上面的示例中, UserLibrary是具有一对一关系的实体 其中一个实体必须包含一个变量,该变量是对另一个实体( Library实体中的userOwnerId )的主键的引用。

    In order to query the list of users and corresponding libraries, we must first model the one-to-one relationship between the two entities, which is done using UserAndLibrary class. The UserAndLibrary class contains an instance of the parent entity(User) and the corresponding instance of the child entity(Library). Then, add the @Relation annotation to the instance of the child entity, with parentColumn set to the name of the primary key column of the parent entity and entityColumn set to the name of the column of the child entity that references the parent entity's primary key.

    为了查询用户列表和相应的库,我们必须首先对两个实体之间的一对一关系进行UserAndLibrary ,这是使用UserAndLibrary类完成的。 UserAndLibrary类包含父实体( User )的实例和子实体( Library )的对应实例。 然后,在@Relation的实例中添加@Relation批注,其中parentColumn设置为父实体的主键列的名称,而entityColumn设置为引用父实体的主键的子实体的列的名称。 。

    Now we can query our database in the following way:

    现在,我们可以通过以下方式查询数据库:

    @Transaction
    @Query("SELECT * FROM User")
    fun getUsersAndLibraries(): List<UserAndLibrary>

    This method requires Room to run two queries, so add the @Transaction annotation to this method to ensure that the whole operation is performed atomically.

    此方法需要Room运行两个查询,因此请向此方法添加@Transaction批注,以确保整个操作是原子执行的。

    一对多关系 (One-to-many relationships)

    A one-to-many relationship between two entities is a relationship where each instance of the parent entity corresponds to zero or more instances of the child entity, but each instance of the child entity can only correspond to exactly one instance of the parent entity.

    两个实体之间的一对多关系是这样一种关系,其中父实体的每个实例对应于零个或多个子实体的实例,但是子实体的每个实例只能恰好对应于父实体的一个实例。

    In the previous music streaming app example, a User can have multiple playlists. Each user can create as many playlists as they want, but each playlist is created by exactly one user.

    在前面的音乐流应用程序示例中,一个User可以具有多个播放列表。 每个用户可以根据需要创建任意数量的播放列表,但是每个播放列表仅由一个用户创建。

    @Entity
    data class User(
        @PrimaryKey val userId: Long,
        val name: String,
        val age: Int
    )
    
    
    @Entity(foreignKeys = @ForeignKey(entity = User.class,
                                      parentColumns = "userId",
                                      childColumns = "userCreatorId",
                                      onDelete = CASCADE))
    data class Playlist(
        @PrimaryKey val playlistId: Long,
        val userCreatorId: Long,
        val playlistName: String
    )
    
    
    data class UserWithPlaylists(
        @Embedded val user: User,
        @Relation(
              parentColumn = "userId",
              entityColumn = "userCreatorId"
        )
        val playlists: List<Playlist>
    )

    As we can see, the approach is very similar to one-to-one relationship, the only difference here is in the relationship model(UserWithPlaylists). Instead of containing a single child entity, it now contains a list of child entity. Querying the database is also very similar.

    如我们所见,该方法与一对一关系非常相似唯一的区别在于关系模型( UserWithPlaylists )。 现在,它不再包含单个子实体,而是包含一个子实体列表。 查询数据库也非常相似。

    @Transaction
    @Query("SELECT * FROM User")
    fun getUsersWithPlaylists(): List<UserWithPlaylists>

    多对多关系 (Many-to-many relationships)

    A many-to-many relationship between two entities is a relationship where each instance of the parent entity corresponds to zero or more instances of the child entity, and vice-versa.

    两个实体之间的多对多关系是一种关系,其中父实体的每个实例对应于零个或多个子实体的实例,反之亦然。

    In the music streaming app example, each playlist can include many songs, and each song can be a part of many different playlists. Therefore, there should be a many-to-many relationship between the Playlist entity and the Song entity.

    在音乐流应用程序示例中,每个播放列表可以包括许多歌曲,并且每个歌曲可以是许多不同播放列表的一部分。 因此, Playlist实体和Song实体之间应该存在多对多关系。

    Many-to-many relationships are distinct from other relationship types because there is generally no reference to the parent entity in the child entity. Instead, a third class is used to represent an associative entity (or cross-reference table) between the two entities. The cross-reference table must have columns for the primary key from each entity in the many-to-many relationship represented in the table.

    多对多关系不同于其他关系类型,因为在子实体中通常没有引用父实体。 而是使用第三类来表示两个实体之间的关联实体 (或交叉引用表)。 交叉引用表必须具有表中表示的多对多关系中每个实体的主键列。

    @Entity
    data class Playlist(
        @PrimaryKey val id: Long,
        val playlistName: String
    )
    
    
    @Entity
    data class Song(
        @PrimaryKey val id: Long,
        val songName: String,
        val artist: String
    )
    
    
    @Entity(primaryKeys = ["playlistId", "songId"],
            foreignKeys = {
                    @ForeignKey(entity = Playlist.class,
                                parentColumns = "id",
                                childColumns = "playlistId"),
                    @ForeignKey(entity = Song.class,
                                parentColumns = "id",
                                childColumns = "songId")
                    }))
            
    data class PlaylistSongCrossRef(
        val playlistId: Long,
        val songId: Long
    )

    Now, the next step depends on how you want to query these related entities.

    现在,下一步取决于您要如何查询这些相关实体。

    • If you want to query playlists and a list of the corresponding songs for each playlist, create a new data class that contains a single Playlist object and a list of all of the Song objects that the playlist includes.

      如果要查询播放列表以及每个播放列表的相应歌曲的列表,请创建一个新的数据类,其中包含一个Playlist对象和该播放列表包括的所有Song对象的列表。

    • If you want to query songs and a list of the corresponding playlists for each, create a new data class that contains a single Song object and a list of all of the Playlist objects in which the song is included.

      如果要查询歌曲以及每个歌曲的对应播放列表的列表 ,请创建一个新的数据类,其中包含一个Song对象和一个包含Song的所有Playlist对象的Playlist

    In either case, model the relationship between the entities by using the associateBy property in the @Relation annotation in each of these classes to identify the cross-reference entity providing the relationship between the Playlist entity and the Song entity.

    无论哪种情况,都可以通过使用这些类中每个类的@Relation批注中的associateBy属性来对实体之间的关系进行建模,以标识提供Playlist实体和Song实体之间的关系的交叉引用实体。

    data class PlaylistWithSongs(
        @Embedded val playlist: Playlist,
        @Relation(
             parentColumn = "playlistId",
             entityColumn = "songId",
             associateBy = @Junction(PlaylistSongCrossRef::class)
        )
        val songs: List<Song>
    )
    
    
    data class SongWithPlaylists(
        @Embedded val song: Song,
        @Relation(
             parentColumn = "songId",
             entityColumn = "playlistId",
             associateBy = @Junction(PlaylistSongCrossRef::class)
        )
        val playlists: List<Playlist>
    )

    Querying the database is similar to the previous approaches.

    查询数据库与以前的方法类似。

    @Transaction
    @Query("SELECT * FROM Playlist")
    fun getPlaylistsWithSongs(): List<PlaylistWithSongs>
    
    
    @Transaction
    @Query("SELECT * FROM Song")
    fun getSongsWithPlaylists(): List<SongWithPlaylists>

    That’s all about the entity relationships in Room. Thank You!!!

    这就是关于Room中的实体关系的全部内容。 谢谢!!!

    翻译自: https://medium.com/mindorks/entity-relationship-in-room-b61cfcbf395

    实体与实体之间的关系

    展开全文
  • 题目描述 ...从模式R1、R3和R4可知,R1和R3为多对对联系,由此可以确定实体E,R4为A、E两个实体间对对多转换成的关系模式,g为联系的属性。 ER模型关系模型的相互转换的一般规则如下: (1)将每一个实.

    题目描述

    在这里插入图片描述

    解题思路

    此题为关系模式转换为 实体类型,因此采用实体—>关系模式的逆向思维解题。
    从模式R1和R2可知,R1和R2为一对一关系,根据这两个模式的拆分可以确定三个实体,因此可以将这三个实体分别命名为A、B、D。A、B两个实体,A、D两个实体分别是一对一的联系,且a和c分别是B和D的外键
    从模式R1、R3和R4可知,R1和R3为多对对联系,由此可以确定实体E,R4为A、E两个实体间对对多转换成的关系模式,g为联系的属性。
    ER模型和关系模型的相互转换的一般规则如下:
    (1)将每一个实体类型转换成一个关系模式,实体的属性为关系模式的属性
    (2)对于二元联系,按照各种情况来处理,表格如下:
    在这里插入图片描述

    参考答案

    在这里插入图片描述
    注意的是:a和c为A的候选码,可任选其一做主码。

    展开全文
  • 数据库实体联系如何转换为关系模式

    千次阅读 多人点赞 2019-07-04 09:44:39
    二、实体联系关系模式 1:1联系 在两个实体任选一个添加另一个实体的主键; 每个实体的码均是该联系的候选键; 1:n联系 1:N 遇到 1:N 关系的话在N端添加另一端的主键,假如有学生和班级两个实体,一个班级可以...

    申明:本博主所有文章均属自用,不做任何商用。觉得写得好免费赠送,觉得不好请出门右转,拒绝任何恶意评论。

    参考《试题》P32试题5

    一、什么是实体、什么是联系

    实体:供应商、项目、零件、员工

    联系:供应

    二、实体联系→关系模式

    • 1:1联系

    在两个实体任选一个添加另一个实体的主键;

    每个实体的码均是该联系的候选键;

    • 1:n联系

    1:N 遇到 1:N 关系的话在N端添加另一端的主键假如有学生和班级两个实体,一个班级可以容纳多个学生,但是一个学生只能选择一个班级, 因此班级和学生是1:N的关系,现在要转换为关系模型, 我们只需在学生的这端加上班级的唯一标识即可,这样做的原因是,因为一个学生只能有一个班级,班级是相对学生唯一的

    该联系的码为n端实体的码,关系的外键是1端的码;

    • n:m联系

    需要将联系转换为实体,然后在该实体上加上另外两个实体的主键,作为联系实体的主键,然后再加上该联系自身带的属性即可。例如有学生和老师两个实体, 一个学生可以由多名老师来授课,一名老师也可以授课多名学生,它们是M:N关系的,假如联系为授课,该联系上有成绩属性,因此当我们把它转换为关系模型时,我们把联系转换为联系实体,并添加学生实体的主键(学号)和教师实体的主键(教师编号)作为自己的主键,值得注意的是,授课实体的外键分别是学号和教师编号,但是它的主键是(学号,教师编号),另外它还拥有自己的一个属性成绩

    • 1:1:N

    这是三元联系的对应关系,但是当转换为关系模型时,和1:N的情况是差不多的。我们只需将N端添加另外两端的主键即可。

    • M:N:P

    这种三元联系的三种多对应关系,看上去很复杂,其实转换起来并不是那么复杂了,我们要做的仅仅是将其中的联系转换为联系实体,然后在联系实体上添加M端N端P端的主键,然后加上联系实体自身的属性,就行了。

    三、例子

    说了这么多看个小例子。

    这是一份关于商店商品仓库的ER图。

    先看仓库和商品之间是M:N的关系,于是我们首先想到的应该是把联系 库存转换为库存实体。 
    库存 (仓库号,商品号,日期,库存量) 
    然后是商品实体和仓库实体 
    商品(商品号,商品名,单价) 
    仓库(仓库号,仓库名,地址)

    除此之外仓库和商品还有一个供应关系,同样是M:N关系: 
    供应 (仓库号,商品号 ,月份,月供应量)

    在上图的商店和仓库之间的关系可能写漏了,但是它们应该也是M:N的关系,一个商店可以被多个仓库供应,一个仓库也可以供应多个商店。上面已经创建了供应实体,现在只需在供应实体中假如商店号即可,也就是商店实体的主键。

    供应(仓库号,商品号,商店号 ,月份,月供应量) 
    商店(商店号,商店名,地址)

    总结
    至此,转换关系模型也完成了,当然这只是个例子,实际的开发中,我们可能会遇到各式各样奇怪的需求,这就更要求我们做好概念设计的环节,对后来的数据库设计和维护都有好处。ER图的好坏,始终是数据库设计的重要一节。

    ================================================================================================

    另一篇文章

    ================================================================================================

    前言
           做了几套软考题之后发现下午题的题型很固定,第一题是数据流图,第二个是关系模式,第三个是用例图,第四个是算法,第五个是设计模式。既然题型这么固定,那么我们就好好的对每个知识点进行深入的研究,然后拿下它!

           So ,今天我们来看一下E-R 图关系模式的转换。

           建立数据库的时候我们首先要画E-R图,E-R图是由实体、属性和联系三要素组成的,每个实体之间会有联系,当我们转换成关系模式的时候,就会出现一对一、一对多和多对多的情况。那么对于实体和联系具体怎么进行转换呢,听我细细道来……

      一、一对一


            1、  将联系转换成一个独立的关系模式,关系模式的名称为联系的名称。关系模式的属性包括该联系所关联的两个实体的码及联系的属性,关系的码取自任一方实体的名称。

           2、  将联系归并到关联的两个实体的任一方,给待归并的一方实体属性集中增加另一方实体的码和该联系的属性即可,归并后的实体码保持不变。

      实例

           一个公司有一个经理,一个经理也只能在一个公司进行任职,所以公司和经理之间是一对一的关系。公司(公司编号,公司名,地址,电话),经理(职工编号,姓名,性别,电话)。经理任职会产生任职日期属性。

     转换为关系模式:

           1、  公司(公司编号,公司名,地址,电话)              主键为公司编号

                   经理(职工编号,姓名,性别,电话)                 主键为职工编号

                   任职(公司编号,职工编号,任职日期)             主键为公司编号或者是职工编号

          2、  (1)公司(公司编号,公司名,地址,电话,职工编号,任职日期) 主键为公司编号,外键为职工编号

                           经理(职工编号,姓名,性别,电话)    主键为职工编号

                  (2)公司(公司编号,公司名,地址,电话)   主键为公司编号

                           经理(职工编号,姓名,性别,电话,公司编号,任职日期)    主键为职工编号,外键为公司编号。

    二、一对多

             1、  将联系转换成一个独立的关系模式,名称为联系的名称,关系模式的属性取该联系所关联的两个实体的码及联系的属性,关系的码是多方实体的码。

             2、  将利息归并到关联的两个实体的多方,给待归并的多方实体属性集中增加一方实体的码和该联系的属性,归并后的多方实体码保持不变。

         
    实例

            一个部门中有多个员工,但是每个员工只能属于一个部门,所以部门和员工之间的关系就是一对多。部门(部门号,部门名称,电话),员工(员工号,姓名,电话)。

        

                        

          
     转换为关系模式:

          1、  部门(部门号,部门名称,电话)   主键是部门号

                 员工(员工号,姓名,电话)        主键是员工号
                 隶属(部门号,员工号)            主键是部门号和员工号

          2、  部门(部门号,部门名称,电话)    主键是部门号

                 员工(员工号,姓名,电话,部门号) 主键为员工号,外键为部门号

    三、多对多

               多对多的联系只能转换成一个独立的关系模式,关系模式的名称取联系的名称,关系模式的属性取该联系所关联的两个多方实体的码及联系的属性,关系的码是多方实体的码构成的属性组。

     实例

          在选课系统中,一个学生可以选修多门课程,一个课程也可以被多个学生选,每门课程最后都要有成绩,所以学生和课程之间是多对多的关系。

    学生(学号,姓名,性别),课程(课程号,课程名称,授课老师)。

          
    转换成关系模式: 

           学生(学号,姓名,性别)                主键为学号

           课程(课程号,课程名称,授课老师)      主键为课程

           选课(学号,课程号,成绩)              主键为学号和课程号的组合,外键为课程号,学号 

          
    实践
           知道了以上的理论知识,我们还要进行实践工作。下面来分析一道真题:

    答案:

    分析:

     1、想必有好多人在第一题中没有将采购那个联系合并吧。

           通过“一个采购订单可以包含多类服装。采购订单上主要由……和对应的供应商”这句话,大家很容易把采购订单与服装的联系和采购订单和供应商的联系画出来,但是我们仔细想想,采购订单上应该把每类服装或者是不同数量的同类的服装对应的供应商表现出来,意思就是在采购订单上,服装和供应商之间也是有联系的。所以我们将这两个联系合并成一个,表示三者之间都互相有联系,并不是只有采购订单和服装,采购订单和供应商有联系。

    2、因为仓库和库管员之间的关系是一对多。所以在填仓库信息这个关系模式时,应该将库管员编码写进去。

          供应情况表示的是供应商和服装之间的联系。因为供应商和服装之间是多对多的关系,所以供应情况中应该包括供应商的码和服装的码。所以将供应商编码和服装编码填进去。

          采购订单是一个实体,需要有的属性根据说明中可知为订单编码,订货日期和应到货日期。

          采购订单明细为采购订单、服装和供应商之间的联系,因为三者是多对多的关系,所以采购订单明细中应包括三者的码。再加上说明中的属性,所以应为订单编码,服装编码,供应商编码,数量和采购价格。

    3、因为题中要求为库管员定期轮流对所有仓库进行抽查,所以库管员和仓库之间的关系应为多对多。

    总结

           每次遇到不会的知识都会有一种得过且过的感觉,总觉得是会,就是没有掌握好而已,然后说自己没有时间总结。这其实就是我们常说的,总是低头走路,却不抬头看路。其实总结如果花费一个小时的时间比做题花费的两个小时的时间更加珍贵,更有收获!每次总结后都深深的体会到总结的好处……相信小伙伴也早就有感触了吧,那就赶紧行动吧!最后提醒大家,不要顺手就用* 或者是n表示对比关系,首先看一下题目要求,如果没有要求,那就看一下给的实体联系图中有没有标出来,如果人家给的*或n,跟人家保持一致,如果都没有的话,那就可以按照自己习惯了……相信这个题,大家看完我的博客之后就应该会了吧!加油!!!
     

    展开全文
  • powerdesigner 实体关系模型的一个例子。 是学校的模型,文章链接地址:http://blog.csdn.net/bomb_2002/archive/2008/09/22/2963735.aspx
  • 实体-联系模型

    千次阅读 2020-12-20 22:08:32
    实体-联系(Entity-Relationship, E-R)模型(以下简称E-R模型)的提出旨在方便数据库的设计,它是通过允许定义代表数据全局逻辑结构的企业模式实现的。 E-R模型采用三个基本概念:实体集、联系集和属性。 将E-R图的...
  • 使用词向量和字符向量作为词表示输入, 使用BiLSTM-CRF模型进行药物实体与关系联合抽取.实验结果表明:在药物-药物交互作用(drugdrug interactions,DDI)2013语料集上,取得了89.9%的实体识别F-score及67.3%的关系抽取...
  • 关系型数据库中实体之间关系

    千次阅读 2018-06-20 20:47:00
    关系型数据库实体间有三种关联关系:一对一,一对多,多对多。 一对一关系(1:1):  如果实体集(表)A 中的每一个实... 员工表、员工详细信息表之间关系是员工表中的一行详细信息表中的一行对应 一对多关...
  • EER 扩展的实体关系模型 我从豆丁网上截图作成的。。。累
  • 详细讲解了实体之间的级联关系,内有代码及相关原理讲解
  • 关于PowerDesigner实体关系模型(CDM)中关于实体关系的使用一直有些疑惑,最近正好在设计一套系统,所以用PD做了一些测试,记录如下 我们在使用PD中CDM的时候可定会遇到处理Entities见关系的情况,但是CDM中建立...
  • 数据库设计--实体关系图(ERD)

    万次阅读 多人点赞 2015-08-01 15:15:17
    实体关系图:简记E-R图是指以实体关系、属性三个基本概念概括数据的基本结构,从而描述静态数据结构的概念模式。 –百度百科 2、E-R的使用方法 E-R图为实体-联系图,提供了表示实体型、属性和联系的方法,用来...
  • 两个实体m:n联系关系模型的转化

    千次阅读 2018-03-26 10:30:07
    两个实体m:n联系关系模型的转化,原有的实体关系表不变,再单独建立一个关系表,分别用两个实体的关键属性作为外键即可,并且,如果联系有属性,也要归入这个关系中。m:n联系转化为关系模型:如图深圳蓝快IT外包...
  • 第2章 数据模型 2.1 实体联系模型 2.2 关系模型 2.3 面向对象的数据模型 习 题 22.1实体联系模型 不同的数据模型提供给我们模型化数据和信息的不同工具 根据模型应用的不同目的 可以将这些模型划分为两个层次: 一类...
  • 数据库的逻辑设计主要是将概念模型转换成一般的关系模式,也就是将实体-联系图中的实体实体的属性和实体之间联系转化为关系模式。在转化过程中会遇到如下问题: (1)命名问题。命名问题可以采用原名,也可以另行...
  • 单个实体内部也有一对一、一对多、多对多的关系 一对一:独生子女家庭是一个实体,一个爸爸有一个孩子,一个孩子也有一个爸爸 一对多:员工是一个实体,员工中存在着领导被领导的...三个实体间的关系实体之间...
  • E-R模型转换为关系模式的方法 3.1 ER模型 3.1.1 三个世界 概念模型:把现实世界转换为信息世界的模型,E-R模型 实施模型:把信息世界转化为数据世界使用的模型,关系模型 3.1.2 E-R模型的组成要素及表示方法 1E-R图的...
  • 第3章实体联系模型(E-R模型) 本章要点: 区三个世界的概念 回E-R模型的基本要素实体属 性联系 区E弌R模型转换为关系模式的方法 3.1ER模型 311三个世界 事物类 实体集 文件 事物 实体 记录 性质 属性 数据项 现实世界 ...
  • 【数据库】实体之间联系

    千次阅读 2020-05-09 18:21:01
    一元联系包括:一个实体型内部各属性之间联系和同一个实体集内的各实体间的联系。 两个实体之间联系称之为二元联系联系的度为2。三个实体之间联系称之为三元联系联系的度为3。N个实体之间联系
  • 在清华大学开源的OpenNRE项目基础上实现中文实体关系识别 github项目地址,点我 文章目录一、中文关系抽取训练结果测试结果二、使用前准备三、注意事项 一、中文关系抽取 使用哈工大,BERT-wwm,中文bert,在20w...
  • 实体联系图学习

    2019-12-16 14:29:44
    E-R图为实体-联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。 基本要素 构成E-R图的基本要素是实体型、属性和联系实体 实体是现实中存在的对象,有具体的,也有抽象的;有物理上...
  • 实体关系抽取入门

    万次阅读 2019-03-13 16:52:39
    关系抽取(Relation Extracion,RE)是其中的重要子任务之一,主要目的是从文本中识别实体并抽取实体之间的语义关系实体关系抽取解决了原始文本中目标实体之间关系分类问题,它也是构建复杂知识...
  • 两个以上实体m:n多元联系关系模型转化,也需要为联系单独建立一个关系,该关系中最少应包括它所联系的各个实体关键字,若是联系有属性,也要归入这个新增关系中。这种转换两个实体间m:n联系的转换类似。例:某...
  • 实体联系模型

    千次阅读 2018-06-25 01:36:53
    一、实体联系(E-R)数据模型概述 该数据模型基于对现实世界的这样一种认识:世界由一组称为实体的基本对象及这些对象间的联系组成,该模型是一种语义模型模型的语义方面主要体现在模型力图去表达数据的意义。...
  • 基于深度学习的命名实体识别与关系抽取

    万次阅读 多人点赞 2019-07-18 22:12:50
    基于深度学习的命名实体识别与关系抽取 摘要:构建知识图谱包含四个主要的步骤:数据获取、知识抽取、知识融合和知识加工。其中最主要的步骤是知识抽取。知识抽取包括三个要素:命名实体识别(NER)、实体关系抽取...
  • 数据的四种常用的数据模型以及三实体之间联系三个世界现实世界信息世界两个实体型间的联系数据模型层次模型 三个世界 现实世界 现实世界,客观存在的世界。 信息世界 概念:信息世界是现实在人们头脑中的反映,...
  • 概念设计(Conceptual Design) —— 设计实体关系模型 (ER Model) 逻辑设计(Logical Design)—— 实现从 ER 模型关系模式(Relation Schemas)的转换。 物理设计(Physical Design) 本文主...
  • 实体识别和关系抽取的联合模型总结

    万次阅读 多人点赞 2019-02-27 17:15:25
    实体识别和关系抽取的目标是从非结构化的文本中发现(实体1、关系实体2)的三元组,它对知识库的构建和问答任务都很重要,是信息抽取的核心问题。 现有的关系抽取方法主要有两种: 1.使用流水线方法进行抽取:先...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 526,239
精华内容 210,495
关键字:

关系模型表示实体与实体之间的联系