精华内容
下载资源
问答
  • 在本文中,我们提出了一个基于关系学习形式主义,概率关系模型(PRM)的统一推荐框架。 作为特殊情况,此框架包括大多数现有的推荐方法,例如协作过滤,基于内容的人口统计过滤和混合方法。 关系学习试图在包含多个...
  • 原始变压器(PyTorch) :laptop: = :rainbow: 此回购包含原始变压器文件的... 为此,(希望)对代码进行了很好的注释,并且我已经包含了playground.py ,在其中我可视化了一些很难用单词解释的概念,但一旦可视化
  • 关于诚信与这三种现象之间的关系与美德、道德、伦理和合法性相关,这个新模型:1) 在一个一致的理论中包含四个术语,2) 使“指南针”清晰明确的道德“在与美德相关的三个现象中的每一个中都潜在可用,以及3)通过...
  • 本篇主要讲一对多的关系。先了解下描述关系的术语。    (1) 依赖实体: 这是包含外键属性的实体(子表)。有时称为 child 。    (2) 主体实体: 这是包含主/备用键属性的实体(主表)。 有时称为 parent。    (3)....

      EF实体关系定义了两个实体互相关联起来(主体实体和依赖实体的关系,对应数据库中主表和子表关系)。 在关系型数据库中,这种表示是通过外键约束来体现。本篇主要讲一对多的关系。先了解下描述关系的术语。
      
      (1) 依赖实体: 这是包含外键属性的实体(子表)。有时称为 child 。
      
      (2) 主体实体: 这是包含主/备用键属性的实体(主表)。 有时称为 parent。
      
      (3) 外键:依赖实体(子表)中的属性,用于存储主表的主键属性的值。
      
      (4) 主键: 唯一标识的主体实体(主表)的属性。 这可能是 primary key 或备用键。
      
      (5) 导航属性: 包含对相关实体引用,在的主体和或依赖实体上定义的属性。
      
      集合导航属性: 一个导航属性,对多个相关实体的引用。
      
      引用导航属性: 一个导航属性,对单个相关实体的引用。
      
      下面示例代码来说明Blog和Post之间的一对多关系。其中 Post 是依赖实体;Blog 是主体实体;Post.BlogId 是外键;Blog.BlogId 是主键;Post.Blog引用导航属性;Blog.Posts集合导航属性。
      
      复制代码
      
      public class Blog
      
      {
      
      public int BlogId { get; set; }
      
      public string Url { get; set; }
      
      public List<Post> Posts { get; set; }
      
      }
      
      public class Post
      
      {
      
      public int PostId { get; set; }
      
      public string Title { get; set; }
      
      public string Content { get; set; }
      
      public int BlogId { get; set; }
      
      public Blog Blog { get; set; }
      
      }
      
      复制代码
      
      二.约定
      
      按照约定,当在实体类型上发现导航属性时,将创建关系。如果属性所指向的类型不能被当前数据库提供程序映射为标量类型,则将其视为导航属性。下面用三个示例来说明通过约定创建的主从实体关系。
      
      2.1 完全定义的关系
      
      关系最常见的模式是在关系的两端定义导航属性,并在依赖实体类中定义外键属性。
      
      (1)如果两个类型之间找到一对导航属性,则它们将被配置为同一关系的反转导航属性。
      
      (2)如果依赖实体包含名为的属性<primary key property name>, <navigation property name><primary key property name>,或<principal entity name><primary key property name>然后它将配置为外键。
      
      下面代码示例是完全定义的关系的实体,通过约定来创建主从实体关系。
      
      复制代码
      
      public class Blog
      
      {
      
      public int BlogId { get; set; }
      
      public string Url { get; set; }
      
      //反转导航属性
      
      public List<Post> Posts { get; set; }
      
      }
      
      public class Post
      
      {
      
      public int PostId { get; set; }
      
      public string Title { get; set; }
      
      public string Content { get; set; }
      
      //通过约定(<primary key property name>)创建外键
      
      public int BlogId { get; set; }
      
      //反转导航属性
      
      public Blog Blog { get; set; }
      
      }
      
      复制代码
      
      使用EF基于数据模型(Blog和Post实体)创建数据库。生成后,查看数据表的关系映射,如下图所示:
      
      2.2  没有外键属性
      
      虽然建议在依赖实体类中定义外键属性,但这不是必需的。如果没有找到外键属性,那么将引入一个名为<navigation property name> > principal key property name>的隐藏外键属性(上篇有介绍)。在下面代码中,依赖实体Post中没有显示定义外键BlogId。
      
      复制代码
      
      public class Post
      
      {
      
      public int PostId { get; set; }
      
      public string Title { get; set; }
      
      public string Content { get; set; }
      
      public Blog Blog { get; set; }
      
      }
      
      复制代码
      
        2.3 单一导航属性
      
          仅包含一个导航属性(没有反转导航属性,也没有外键属性)就足以拥有约定定义的关系。还可以有一个导航属性和一个外键属性。代码如下所示产:
      
      复制代码
      
      public class Blog
      
      {
      
      public int BlogId { get; set; }
      
      public string Url { get; set; }
      
      public List<Post> Posts { get; set; }
      
      }
      
      public class Post
      
      {
      
      public int PostId { get; set; }
      
      public string Title { get; set; }
      
      public string Content { get; set; }
      
      }
      
      复制代码
      
      三. 数据注释
      
        有两个数据注释可用于配置关系,[ForeignKey]和[InverseProperty]。
      
      3.1 ForeignKey可以将指定属性设置为外键属性。 这种设置通常是外键属性不被约定发现时,显示设置。如下面代码示例, 在依赖实体Post中将BlogForeignKey指定为外键。代码中生成的主从实体关系与上面的约定示例是一样的。
      
      复制代码
      
      public class Blog
      
      {
      
      public int BlogId { get; set; }
      
      public string Url { get; set; }
      
      public List<Post> Posts { get; set; }
      
      }
      
      public class Post
      
      {
      
      public int PostId { get; set; }
      
      public string Title { get; set; }
      
      public string Content { get; set; }
      
      public int BlogForeignKey { get; set; }
      
      [ForeignKey("BlogForeignKey")]
      
      public Blog Blog { get; set; }
      
      }
      
      复制代码
      
      下面使用EF基于数据模型(Blog和Post实体)创建数据库。生成后,查看数据表的关系映射,如下图所示:
      
      3.2 InverseProperty配置依赖实体和主体实体上的导航属性如何配对。当两个实体类型之间有一对以上的导航属性时,通常会这样做。如下面代码示例:
      
      复制代码
      
      public class Post
      
      {
      
      public int PostId { get; set; }
      
      public string Title { get; set; }
      
      public string Content { get; set; }
      
      public Blog Blog { get; set; }
      
      public User Author { get; set; }
      
      public User Contributor { get; set; }
      
      }
      
      public class User
      
      {
      
      public string UserId { get; set; }
      
      public string FirstName { get; set; }
      
      public string LastName { get; set; }
      
      [InverseProperty("Author")]
      
      public List<Post> AuthoredPosts { get; set; }
      
      [InverseProperty("Contributor")]
      
      public List<Post> ContributedToPosts { get; set; }
      
      }
      
      复制代码
      
      下面使用EF基于数据模型(User和Post实体)创建数据库。生成后,查看数据表的关系映射,如下图所示:
      
      四. Fluent API
      
        要在Fluent API中配置关系,首先要确定组成关系的导航属性。HasOne或HasMany标识开始配置的实体类型上的导航属性。然后调用WithOne或WithMany来标识反导航。HasOne/WithOne用于引用导航属性,而HasMany/WithMany用于集合导航属性。
      
      在EF基于现有数据库进行反向工程时,根据数据库将自动生成DbContext上下文类,里面重写了OnConfiguring方法。下面示例是一个MyContext上下文类,在OnModelCreating方法中确定了实体的关系。
      
      4.1 完全定义的关系
      
      复制代码
      
      class MyContext : DbContext
      
      {
      
      public DbSet<Blog> Blogs { get; set; }
      
      public DbSet<Post> Posts { get; set; }
      
      protected override void OnModelCreating(ModelBuilder modelBuilder)
      
      {
      
      modelBuilder.Entity<Post>()
      
      .HasOne(p => p.Blog) //Post类有一个Blog引用导航属性
      
      .WithMany(b => b.Posts);//Blog类有一个Posts反导航集合
      
      }
      
      }
      
      public class Blog
      
      {
      
      public int BlogId { get; set; }
      
      public string Url { get; set; }
      
      //反导航集合
      
      public List<Post> Posts { get; set; }
      
      }
      
      public class Post
      
      {
      
      public int PostId { get; set; }
      
      public string Title { get; set; }
      
      public string Content { get; set; }
      
      //引用导航属性
      
      public Blog Blog { get; set; }
      
      }
      
      复制代码
      
      4.2 单一导航属性
      
      如果只有一个导航属性,那么就会出现无参数重载的WithOne以及WithMany。这表明在关系的另一端有一个概念上的引用或集合,但是实体类中不包含导航属性。
      
      复制代码
      
      class MyContext : DbContext
      
      {
      
      public DbSet<Blog> Blogs { get; set; }
      
      public DbSet<Post> Posts { get; set; }
      
      protected override void OnModelCreating(ModelBuilder modelBuilder)
      
      {
      
      modelBuilder.Entity<Blog>()
      
      .HasMany(b => b.Posts)//blog类有一个集合导航属性
      
      .WithOne();
      
      }
      
      }
      
      public class Blog
      
      {
      
      public int BlogId { get; set; }
      
      public string Url { get; set; }
      
      public List<Post> Posts { get; set; }
      
      }
      
      public class Post
      
      {
      
      public int PostId { get; set; }
      
      public string Title { get; set; }
      
      public string Content { get; set; }
      
      }
      
      复制代码
      
      下面使用EF基于数据模型(User和Post实体)创建数据库。生成后,查看数据表的关系映射,如下图所示:
      
      4.3 外键
      
      可以使用 Fluent API 配置哪些属性应用作给定关系外键属性。
      
      复制代码
      
      class MyContext : DbContext
      
      {
      
      public DbSet<Blog> Blogs { get; set; }
      
      public DbSet<Post> Posts { get; set; }
      
      protected override void OnModelCreating(ModelBuilder modelBuilder)
      
      {
      
      modelBuilder.Entity<Post>()
      
      .HasOne(p => p.Blog)
      
      .WithMany(b => b.Posts)
      
      .HasForeignKey(p => p.BlogForeignKey);
      
      }
      
      }
      
      public class Blog
      
      {
      
      public int BlogId { get; set; }
      
      public string Url { get; set; }
      
      public List<Post> Posts { get; set; }
      
      }
      
      public class Post
      
      {
      
      public int PostId { get; set; }
      
      public string Title { get; set; }
      
      public string Content { get; set; }
      
      public int BlogForeignKey { get; set; }
      
      public Blog Blog { get; set; }
      
      }
      
      复制代码
      
      以下代码列表演示如何配置复合外键。
      
      复制代码
      
      class MyContext : DbContext
      
      {
      
      public DbSet<Car> Cars { get; set; }
      
      protected override void OnModelCreating(ModelBuilder modelBuilder)
      
      {
      
      modelBuilder.Entity<Car>()
      
      .HasKey(c =www.tiaotiaoylzc.com/> new { c.State, c.LicensePlate });
      
      modelBuilder.Entity<www.yongshi123.cn RecordOfSale>()
      
      .HasOne(s =www.zhongxinyul2.com> s.Car)
      
      .WithMany(c => c.SaleHistory)
      
      .HasForeignKey(s => new { s.CarState, s.www.mushi157.com CarLicensePlate });
      
      }
      
      }
      
      public class Car
      
      {
      
      public string State { get; set; }
      
      public string LicensePlate { get; set; }
      
      public string Make { get; set; }
      
      public string Model { get; set; }
      
      public List<RecordOfSale>www.michenggw.com SaleHistory { get; set; }
      
      }
      
      public class RecordOfSale
      
      {
      
      public int RecordOfSaleId { get; set; }
      
      public DateTime DateSold { get; set; }
      
      public decimal Price { get; set; }
      
      public string CarState { get; set; }
      
      public string CarLicensePlate { get; set; }
      
      public Car Car { get; set; }
      
      }
      
      复制代码
      
      总结:关于实体关系,还讲到了“必需和可选的关系”、“级联删除”。以及关系模式中的“一对一关系”、“多对多关系",这些以后用到再参考文档。 个人认为在传统开发中,以建库建表优先的情况下,不会去设置数据表的外键关系,这种关系是由编程去控制。 这样对数据库进行反向工程时,也不会生成有关系的主从实体模型。

    展开全文
  • 笔记主要基于官方文档,从中提取要点和记录笔记,关键处包含了官方文档链接。详见官方文档。 官方文档:Django documentation 博客推荐:Django2.2教程 官方文档模型层:The model layer 模型层 目录 1.关系 ...

    【Django 笔记】模型

     

    笔记主要基于官方文档,从中提取要点和记录笔记,关键处包含了官方文档链接。详见官方文档。

    官方文档:Django documentation 

    博客推荐:Django2.2教程

    官方文档模型层:The model layer   模型层

     

    目录

    1.关系

    1.1.关系字段类型

    1.2.关联查询(一对多)

    1.3.插入、更新和删除

    1.4.自关联

    2.管理器

    3. 元选项

    回归原生 SQL


     

    1.关系

    相关官方文档:关系类型 https://docs.djangoproject.com/zh-hans/2.2/topics/db/queries/#related-objects

    https://www.liujiangblog.com/course/django/96

     

    1.1.关系字段类型

    关系型数据库的关系包括三种类型:

    • ForeignKey:一对多,将字段定义在多的一端中
    •  ManyToManyField:多对多,将字段定义在任意一端中。
    • OneToOneField:一对一,将字段定义在任意一端中。
    • 可以维护递归的关联关系,使用'self'指定,详见"自关联"。

     

    1.1.1.一对多ForeignKey

    一对多关联

    One-to-many relationships多对一的关系,通常被称为ForeignKey外键。外键字段类的定义如下:

    class ForeignKey(toon_delete**options)[源代码]

    外键需要两个位置参数,一个是关联的模型(被关联的类)和 on_delete 选项。在Django2.0版本后, on_delete 选项为必填。

     

    外键要定义在‘多’的一方: 如厂家生产很多车,则外键定义在车

    from django.db import models
    
    class Car(models.Model):
        manufacturer = models.ForeignKey(
            'Manufacturer',
            on_delete=models.CASCADE,
        )
        # ...
    
    class Manufacturer(models.Model):
        # ...
        pass

     

    若关联的对象在另外一个app中,可以用完整的应用标签显式的指出。

    下例假设Manufacturer模型存在于production这个app中,则Car模型的定义如下:

    class Car(models.Model):
        manufacturer = models.ForeignKey(
            'production.Manufacturer',      # 关键在这里!!
            on_delete=models.CASCADE,
        )

     

    如果要创建一个递归的外键,也就是自己关联自己的外键(自关联),使用下面的方法:

    models.ForeignKey('self', on_delete=models.CASCADE)

    核心在于‘self’这个引用。什么时候需要自己引用自己的外键呢?典型的例子就是评论系统!一条评论可以被很多人继续评论,如下所示:

    class Comment(models.Model):
        title = models.CharField(max_length=128)
        text = models.TextField()
        parent_comment = models.ForeignKey('self', on_delete=models.CASCADE)
        # .....

    注意上面的外键字段定义的是父评论,而不是子评论。为什么呢?因为外键要放在‘多’的一方!

    类似的还有自关联的 地区的行政管理、公司部门的上下级部门行政级别管理等系统。

     

    外键还有一些重要的参数,参考:外键参数

    示例:多对一关联示例

     

     

    1.1.2. 多对多ManyToManyField

    多对多关联

    多对多的字段可以定义在任何的一方,尽量定义在符合人们思维习惯的一方。字段类的定义如下:

    class ManyToManyField(to**options)[源代码]

    多对多关系需要一个位置参数:关联的对象模型。它的用法和外键多对一基本类似。

    class TypeInfo(models.Model):
      # ...
      pass
    
    class NewsInfo(models.Model):
      # ...
      ntype = models.ManyToManyField('TypeInfo') #通过ManyToManyField建立TypeInfo类和NewsInfo类之间多对多的关系

    注:在数据库后台,Django实际上会额外创建一张用于体现多对多关系的中间表。默认情况下,该表的名称是“多对多字段名+关联对象模型名+一个独一无二的哈希码”。例如‘author_books_9cdf4’,当然也可以通过db_table选项,自定义表名。

     

    多对多还有一些重参数,参考:多对多参数

    示例:多对多关联示例

     

    1.1.3. 一对一OneToOneField

    一对一关联

    一对一关系类型的定义如下:

    class OneToOneField(toon_deleteparent_link=False**options)[源代码]

    一对一关系类似具有unique=True属性的外键关系,但是反向关联对象只有一个。

     

    该关系的第一位置参数为关联的模型,其用法和前面的多对一外键一样。

    如果你没有给一对一关系设置related_name参数,Django将使用当前模型的小写名作为默认值。

    OneToOneField一对一关系拥有和多对一外键关系一样的额外可选参数,只是多了一个parent_link参数。

     

    示例:一对一关联示例

     

     

    1.2.关联查询(一对多)

     

    1.2.1.查询和对象关联的数据

    在一对多关系中,一对应的类我们把它叫做一类,多对应的那个类我们把它叫做多类,我们把多类中定义的建立关联的类属性叫做关联属性(关系属性、关系字段)

     

    以下例子,假设,一本书(一类BookInfo)对应多个英雄(多类HeroInfo)。

     

    由一类的对象查询多类的时候(由一到多的访问语法):一类的对象.多类名小写_set.

    一类的对象.多类名小写_set.all()
    
    # 查询id为1的图书关联的英雄的信息
    b = BookInfo.objects.get(id=1)
    b.heroinfo_set.all()
    
    
    # 通过模型类查询:
    HeroInfo.objects.filter(hbook__id=1)
    

    由多类的对象查询一类的时候:多类的对象.关联属性

    多类的对象.关联属性 
    
    # 查询id为1的英雄关联的图书信息
    h = HeroInfo.objects.get(id=1)
    h.hbook
    
    
    # 通过模型类查询:
    BookInfo.objects.filter(heroinfo__id=1)
    

    由多类的对象查询一类对象的id时候:多类的对象. 关联属性_id

    多类的对象. 关联属性_id
    
    h = HeroInfo.objects.get(id=1)
    h.hbook_id

     

    1.2.2.通过模型类实现关联查询

    通过多类的条件查询一类的数据

       一类名.objects.filter(多类名小写__多类属性名__条件运算符=值)

     

    通过一类的条件查询多类的数据

       多类名.objects.filter(关联属性__一类属性名__条件运算符=值)

     

    Tips:

    • 通过模型类实现关联查询时,要查哪个表中的数据,就需要通过哪个类来查。
    • 写关联查询条件的时候,如果类中没有关系属性,条件需要写对应类的名。如果类中有关系属性,直接写关系属性。

     

    例子:

    例:查询图书信息,要求图书关联的英雄的描述包含''

    BookInfo.objects.filter(heroinfo__hcomment__contains='八')

    例:查询图书信息,要求图书中的英雄的id大于3.

    BookInfo.objects.filter(heroinfo__id__gt=3)

    例:查询书名为天龙八部的所有英雄。

    HeroInfo.objects.filter(hbook__btitle='天龙八部')

     

    1.3.插入、更新和删除

    调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新

    调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除

     

    1.4.自关联

    自关联:自关联

    自关联是一种特殊的一对多关系。

    说明:关系属性使用self指向本类,要求null和blank允许为空,因为一级数据是没有父级的。

    要创建一个递归关系 -- 一个与其自身有多对一关系的对象 -- 则使用 models.ForeignKey('self', on_delete=models.CASCADE)

     

    举例:地区信息模型类

    #定义地区模型类,存储省、市、区县信息
    class AreaInfo(models.Model):
        atitle=models.CharField(max_length=30)#名称
        aParent=models.ForeignKey('self',null=True,blank=True, on_delete=models.CASCADE)#关系

     

    2.管理器

    管理器官方文档:管理器

     

    查询时,一般都用到objects,比如:模型类.objects.all(),那objects是一个什么东西呢?

    答:objects是Django帮我自动生成的管理器对象默认情况下,Django 为每个模型类添加了一个名为 objects 的 Manager通过这个管理器可以实现对数据的查询。objects是models.Manger类的一个对象。

     

    管理器

    管理器是Django的模型进行数据库操作的接口,Django应用的每个模型类都拥有至少一个管理器。Django支持自定义管理器类,继承自models.Manager。

     

    自定义管理器

    当没有为模型类定义管理器时,Django会为每一个模型类生成一个名为objects的管理器,自定义管理器后,Django不再生成默认管理器objects。

    继承基类 Manager,在模型中实例化自定义 Manager,你就可以在该模型中使用自定义的 Manager

     

    自定义Manager主要用于两种情况

    1.改变查询的结果集,修改 Manager 返回的原始 QuerySet比如重写all()方法。

    2.向管理器类中添加额外的Manager 方法,如封装方法,操作模型类对应的数据表(增删改查)。

     

     Manager 方法能通过 self.model() 获取所依附的模型类,使用self.model()就可以创建一个跟自定义管理器对应的模型类对象。

    在自定义的Manager里使用,这样就避免了模型类名发生变化时,需要改自定义Manager的代码。

     

    举例

    class BookInfoManager(models.Manager):
        '''图书模型管理器类'''
        # 1.改变原有查询的结果集
        def all(self):
            # 1.调用父类的all方法,获取所有数据
            books = super().all() # QuerySet
            # 2.对books中的数据进行过滤
            books = books.filter(isDelete=False)
            # 返回books
            return books
    
        # 2.封装方法,操作模型类对应的数据表(增删改查)
        def create_book(self, btitle, bpub_date):
            '''添加一本图书'''
            # 1.创建一个图书对象
            # 获取self所在的模型类
            model_class = self.model
            book = model_class()
            book.btitle = btitle
            book.bpub_date = bpub_date
            # 2.添加进数据库
            book.save()
            # 3.返回book
            return book
    
    
    class BookInfo(models.Model):
        # ...省略
        objects = BookInfoManager()  # 自定义一个BookInfoManager类的对象

     

    模型管理器类和模型类关系

    如图:模型类的objects就是模型管理类Manager的实例对象。模型类的实例对象可以通过objects调用Manager的方法...

     

    更多Manager详情移步官方文档:https://docs.djangoproject.com/zh-hans/2.2/topics/db/managers/#

     

    3. 元选项

    官方文档:Meta 选项Model Meta options

    相关博文:https://www.liujiangblog.com/course/django/99

     

    模型的元数据,指的是“除了字段外的所有内容”,例如排序方式、数据库表名、人类可读的单数或者复数名等等。所有的这些都是非必须的,甚至元数据本身对模型也是非必须的。

     

    利用元类Mate指定表名

    Django默认生成的表名:

    <app_name>_<model_name>  即   应用名小写_模型类名小写 

    但在Django中,默认生成的表名如上。当模型名改了之后,对应的表名也会改变,这时用新的表名去找旧的数据就会报错。要表名不依赖于应用和模型类的名字,就需要指定表名。

    在模型类中定义一个元类Meta,在里面定义一个类属性db_table就可以指定表名。如下:

    # 定义图书模型类BookInfo
    class BookInfo(models.Model):
        # ...省略
    
        # 定义元选项
        class Meta:
          db_table='bookinfo'  # 指定BookInfo生成的数据表名为bookinfo

    重新执行迁移之后,表名就是 bookinfo 了。

     

    模型中增加元数据

    有上面的例子可见,想在模型中增加元数据,方法很简单,在模型类中添加一个子类,名字是固定的Meta,然后在这个Meta类下面增加各种元数据选项或者说设置项

    强调:每个模型都可以有自己的元数据类,每个元数据类也只对自己所在模型起作用。

     

    可用的元数据选项:参考 Available Meta options

     

     

    回归原生 SQL

    若你发现需要编写的 SQL 查询语句太过复杂,以至于 Django 的数据库映射无法处理,你可以回归手动编写 SQL。Django 针对编写原生 SQL 有几个选项;参考 执行原生 SQL 查询

    最后,Django 数据库层只是一种访问数据库的接口,理解这点非常重要。你也可以通过其它工具,编程语言或数据库框架访问数据库;Django 并没有对数据库数据库做啥独有的操作。

     

    -----end-----

    展开全文
  • OMT 对象模型、动态模型和功能模型

    千次阅读 2015-09-09 17:01:01
    对象模型描述系统中对象的静态结构、对象之间的关系、对象的属性、对象的操作。对象模型表示静态的、结构上的、系统的“数据"特征。对象模型为动态模型和功能模型提供了基本的框架,对象模型包含对象和类的对象图...

      对象模型描述系统中对象的静态结构、对象之间的关系、对象的属性、对象的操作。对象模型表示静态的、结构上的、系统的“数据"特征。对象模型为动态模型和功能模型提供了基本的框架,对象模型用包含对象和类的对象图来表示。
        OMT的对象模型中除了对象、类、继承外,还有一些其他的概念,下面介绍几个主要的概念。
        (1)链(1ink)和关联(association):链表示实例对象间的物理或概念上的连接,例如在表1 0-5中,J oe Doe为Simplex公司工作,工资2 000元。关联描述具有公共结构和公共语义的一组链,例如关联works—for描述了一组某人为某公司工作的链。实际上链是关联的一个实例,链可以有属性,称为链属性,链属性表示关联中链的性质,图1 O一5给出了链、关联、链属性的一个实例。图中的实心圆是关联的阶(也称为重数),阶指出一个类的多少个实例可以与所关联的类的一个实例相关。实心圆表示O或多个,空心圆表示0或1个,没有圆表示1个.
        (2)泛化(generalization):泛化是一个类与它的一个或多个细化类之间的关系,即一般与特殊的关系。被细化的类称为父类,每个细化的类称为子类,子类可以继承父类的特性.
        (3)聚集(aggregation):聚集是一种整体与部分的关系,在这种关系中表示整体的对象与表示部分的对象关联。图1 O一6给出了泛化和聚集的实例。
      (4)模块(module):模块是组合类、关联和泛化的一种逻辑结构,模块给出了某个主题的视图。

       2)动态模型
        动态模型描述与时间和操作顺序有关的系统特征——激发事件、事件序列、确定事件先后关系以及事件和状态的组织。动态模型表示瞬时的、行为上的、系统的“控制"特征。动态模型用状态图来表示。每张状态图显示了系统中一个类的所有对象所允许的状态和
    事件的顺序。
        3)功能模型
        功能模型描述与值的变换有关的系统特征——功能、映射、约束和函数依赖。功能模型用数据流图来表示。
        3个模型之间具有下述关系。
        (1)与功能模型的关系:对象模型展示了功能模型中的动作者、数据存储和流的结构,动态模型展示了执行加工的顺序。
        (2)与对象模型的关系:功能模型展示了类上的操作和每个操作的变量,因此它也表示了类之间的“供应者一客户"关系;动态模型展示了每个对象的状态以及它接收事件和改变状态时所执行的操作。
        (3)与动态模型的关系:功能模型展示了动态模型中未定义的不可分解的动作和活动的定义,对象模型展示了是谁改变了状态和承受了操作。

    展开全文
  • 概念模型、逻辑模型、物理模型 ...主要是抽取出系统中有哪些概念(此时可以不包含属性,只有实体集,联系集的分析结构) 表示概念模型最常用的是**"实体-关系"图**。 E-R图主要是由实体、属性和关系三个要素构成...

    概念模型、逻辑模型、物理模型

    1.概念模型

    在了解了用户的需求,用户的业务领域工作情况以后,经过分析和总结,提炼出来的用以描述用户业务需求的一些概念的东西。

    如销售业务中的“客户”和“定单”,还有就是“商品”,“业务员”。主要是抽取出系统中有哪些概念(此时可以不包含属性,只有实体集,联系集的分析结构)

    表示概念模型最常用的是**"实体-关系"图**。 E-R图主要是由实体、属性和关系三个要素构成的。

    简单概括,就是——“是什么”

    2.逻辑模型

    逻辑模型就是要将概念模型具体化,就是要实现概念模型所描述的东西,需要哪些具体的功能,处理哪些具体的信息,是对概念模型的进一步细化。

    还以销售业务为例:“客户”信息基本上要包括:单位名称,联系人,联系电话,地址等属性;“商品”信息基本上要包括:名称,类型,规格,单价等属性;“定单”信息基本上要包括:日期和时间属性。并且“定单”要与“客户”,“业务员”和“商品”明细关联。

    系统需要建立几个数据表:业务员信息表,客户信息表,商品信息表,定单表。

    系统要包括几个功能:业务员信息维护,客户信息维护,商品信息维护,建立销售定单 。

    简单概括,就是——“做什么”

    3.物理模型

    物理模型是对真实数据库的描述。如关系数据库中的一些对象为表、视图、字段、数据类型、长度、主键、外键、索引、约束、是否可为空、默认值。

    在具体的物理介质上实现出来。如:数据库使用SQL Server 2000,这样就可以编写具体的SQL脚本在数据库服务器上将数据库建立起来。其中包括业务员信息表,客户信息表,商品信息表,定单表。

    简单概括,就是——“怎么做”

    展开全文
  • 该存储库包含SERank模型的tensorflow实现。 该代码是基于开发的。 与,我们的方法获得了相当的排名性能增益,而只需要很少的计算开销。 SERank模型已成功部署到“智虎,该是中国最大的社区问答平台之一。 依存...
  • 主要是抽取出系统中有哪些概念(此时可以不包含属性,只有实体集,联系集的分析结构)  表示概念模型最常用的是"实体-关系"图。 E-R图主要是由实体、属性和关系三个要素构成的。  简单概括...
  • 模型

    2020-08-25 18:37:26
    概念:CSS盒子模型就是在网页设计中经常用到的一种思维模型,是CSS布局的基石,主要规定了元素是如何显示元素间相互关系。定义所有元素都可以有像盒子一样的平面空间和外形。包含内容区、填充、边框和外边距,这就是...
  • 对象模型

    2012-08-14 10:43:55
    对象模型包含对象及对象的关系图表示。图9-1给出了在对象模型中用于表示类和对象的图形符号。   使用OMT建立对象模型主要步骤如下:   (1).确定对象类;   (2).定义数据词典,用以描述类、属性和关系;...
  • 领域模型

    千次阅读 2017-12-23 19:45:47
    类表示业务概念,但类通常只包含重要属性,不包含操作。关联和泛化显示了这些概念之间的关系。 2. 建立用例模型的过程 2.1发现类和对象 (1)名词分析法 识别问题域和用例描述中的名词和名词短语,然后将它们作为候选...
  • JVM的内存模型

    2020-08-30 22:14:20
    我们这边所讲的JVM内存模型是指JAVA8的内存模型,JVM的内存模型包含了: 堆区、方法区、虚拟机栈、本地方法栈、程序计数器,关于JVM的内存模型,各大博客网站都有非常详细的讲解,这边我主要根据自己的理解做一个...
  • 所谓生产者-消费者问题,实际上主要包含了两类线程,一种是生产者线程用于生产数据,另一种是消费者线程用于消费数据,为了解耦生产者和消费者的关系,通常会采用共享的数据区域 如果共享数据区已满的话,阻塞生产...
  • 文本匹配模型ESIM

    2020-05-26 14:16:28
    ESIM是一个综合应用了BiLSTM和注意力机制的模型,在文本匹配中效果十分强大. 文本匹配说就是分析两个句子是否具有某种关系,比如有一个问题,现在给出一个答案,我们就需要分析这...ESIM模型主要是用来做文本推理的,给
  • 本文继续探讨,modelMeta,存放模型的属性、和字典的键对应关系的描述文件 结构: 主要使用四个模型: @interface YYClassPropertyInfo : NSObject 对应模型的属性 @interface YYClassInfo : NSObject 对应模型的...
  • 第二章 聚合数据模型

    2018-08-04 14:22:00
    N哦SQL技术与传统的关系数据库相比,最明显的转变是抛弃了关系模型。... 关系模型:元组(行)是受限的结构:只能包含一系列的值,不能嵌套另外的元组和列表。  所有操作都以元组为目标,而且其返回值必...
  • NoSQL数据模型总结

    千次阅读 2015-01-23 19:45:44
    数据模型 数据模型是人之和操作数据时所用的模型。对于使用数据库的人来说,数据模型描述了我们如何同...在过去的几十年中,关系型数据模型是占主导地位的数据模型,它是一组直观的表格。每张表有若干行,每行包含
  • 什么是盒模型

    千次阅读 2020-02-23 15:07:02
    概念:CSS盒子模型就是在网页设计中经常用到的一种思维模型,是CSS布局的基石,主要规定了元素是如何显示元素间相互关系。定义所有元素都可以有像盒子一样的平面空间和外形。包含内容区、填充、边框和外边距,这就是...
  • 本文利用理想气体焓变与定压热容的关系, 提出了一种基于氢气分子转动的弛豫模型, 并讨论了转动弛豫和振动弛豫的相似与不同. 该模型不仅适用于氢气, 还能够和其他气体的振动弛豫模型相结合求解混合气体的声弛豫吸收...
  • 这个项目从原理到实践,用完整的例子展示HTTP协议的各个环节,包含网络分层模型、TCP和HTTP的关系、HTTP数据包构成、头行信息的定义、数据传输类型、缓存和资源校验、Cookie和Session、各种非常有意义的Header、...
  • 主要内容 关系数据库的各项定义 1. 关系(relation) 2. 关系模式(relation schema) 3. 关系数据库(relation database) ...关系模型是关系数据库系统使用的数据模型,它只包含了单一的数...
  • css盒模型简介

    2020-03-30 23:23:51
    它是包含了内容(content)、内边距(padding)、边框(norder)、外边距(margin)属性的一个盒子。 盒子模型如下: 一、padding的定义: 从盒子的内部到盒子的外围距离,给盒子添加内填充的属性为padding。 二、...
  • 求解算例所得的多组非劣解反映了物流成本与客户满意度之间的悖反关系,同时包含了以物流成本最小化为目标的传统选址模型的最优解,表明了多目标模型的优越性。对比结果说明新鲜度条件下建立的冷链物流配送网络模型比...
  • 用例图-功能模型

    千次阅读 2019-09-13 12:04:05
    绘制方法 绘制用例图时,我们需要明确角色和用例,用例和用例之间的...包含关系是指一个用例在执行过程中,会调用另外一个用例来完成相关任务,也就是在一个用例的内部包含了另外一个用例。例如,用户注册和用户登...
  • 求解算例所得的多组非劣解反映了物流成本与客户满意度之间的悖反关系,同时包含了以物流成本最小化为目标的传统选址模型的最优解,表明了多目标模型的优越性。对比结果说明新鲜度条件下建立的冷链物流配送网络模型比...
  • brp文件是一种以文本形式存储数据的文件,其中包含模型进行过的变换、模型包含的元素(Vertices、Edges、Wires、Faces等)的信息以及模型的方向、位置等。 OpenCascade会把产生的3D模型通过brp格式的文件进行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,116
精华内容 446
关键字:

关系模型主要包含了