AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 286847
Accepted
Surya Bhusal
Surya Bhusal
Asked: 2021-03-12 03:33:22 +0800 CST2021-03-12 03:33:22 +0800 CST 2021-03-12 03:33:22 +0800 CST

如何在 ER 图中建模弱实体?

  • 772

我正在研究弱实体概念,并试图对关系进行建模Hotel has many rooms。我已经提出了下面介绍的部分解决方案,但是我在唯一标识与特定酒店相关的房间实体中的元组时遇到了问题。

我的假设

  1. Hotel(hotel_number, name) 是一个强大的实体。
  2. Rooms(room_number, bed) 是一个弱实体,它的存在依赖于酒店的存在。

建模的 ER 图

1. 酒店实体表

hotel_id 姓名
125 n1
132 n2
173 n3
103 n4
193 n5

2.房间实体表

房间号 床
101 3
101 2
102 1
103 6

有两家酒店的 hotel_id 为 125 和 132。hotel_id 为 125 的酒店的房间编号为 101,有 3 张床,另一家酒店的房间编号为 101,有 2 张床。那么如何在弱实体(即房间)没有 pk 的情况下对给定关系进行建模?

database-design erd
  • 2 2 个回答
  • 1346 Views

2 个回答

  • Voted
  1. Best Answer
    David Browne - Microsoft
    2021-03-12T18:40:18+08:002021-03-12T18:40:18+08:00

    房间应该有 (hotel_id,room_number) 的 PK。

    弱实体具有以强实体键/外键作为前导列的复合键。

    有些人不同意这种方法,但他们错了。

    如何找到属于特定酒店的房间,该酒店的床位数不同,限制了我的问题领域的属性

    就像是:

    select *
    from rooms
    where hotel_id  = 1001
      and beds = 3
    
    • 3
  2. J.D.
    2021-03-12T04:47:05+08:002021-03-12T04:47:05+08:00

    真正的问题是为什么表没有主键Rooms?在大多数情况下(除了一些边缘情况,如临时表),您的表上应该有一个主键。

    尽管如此,即使表上没有主键Rooms,看起来关系自然是多对一的Hotels(即任何房间只能属于一个酒店),因此您至少可以添加一个外键字段上的Rooms桌子hotel_id。所以你的外键约束将Rooms.hotel_id是Hotels.hotel_id.

    但我的建议是在您的表中添加主键和外键字段。Rooms如果不做这些事情中的至少一件,就不可能在Rooms和之间建立关系Hotels。表上的主键Rooms将定义在hotel_id, room_number.

    • 1

相关问题

  • 过滤索引是否有助于改进基于输入时间的查询,还是应该避免这种情况?

  • MySQL VARCHAR 和 TEXT 数据类型有什么区别?

  • 存储计算值或根据要求重新计算它们更好吗?[复制]

  • 存储与计算聚合值

  • 在数据仓库中实现多对多关系有哪些方法?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve