惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
Google DeepMind News
Google DeepMind News
博客园 - 【当耐特】
量子位
博客园 - 司徒正美
爱范儿
爱范儿
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
Jina AI
Jina AI
J
Java Code Geeks
腾讯CDC
大猫的无限游戏
大猫的无限游戏
V
Visual Studio Blog
I
InfoQ
D
Docker
Recent Announcements
Recent Announcements
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
宝玉的分享
宝玉的分享
G
Google Developers Blog
GbyAI
GbyAI
Y
Y Combinator Blog
有赞技术团队
有赞技术团队
H
Help Net Security

姓王者的博客

Linux用户Secure Boot自主维护指南 | 姓王者的博客 MAD Bugs 已经开始——关于信息安全的军备竞赛 | 姓王者的博客 解决钉钉Dingtalk无法在Linux新版内核上启动问题-修复可执行栈错误 | 姓王者的博客 突发:GitHub 正遭受大规模 Issue 赌博广告轰炸 | 姓王者的博客 Ubuntu26.04-beta体验:坚毅浣熊! | 姓王者的博客 fakeclaw装作龙虾发贴吧 | 姓王者的博客 找回12年前的QQ记忆 | 姓王者的博客 在Linux上玩Flash网页游戏-洛克王国 | 姓王者的博客 Copilot将使用交互数据来训练 | 姓王者的博客 重要通知-请更新我的GPG公钥 | 姓王者的博客 为了自由Android | 姓王者的博客 GPL"2,3"事 | 姓王者的博客 短文-对VitePlus的一点🤏小贡献 | 姓王者的博客 Bing收录没了?亲测有效的快速恢复指南 | 姓王者的博客 解决桌面设备二维码快速识别的工具-ClipQR | 姓王者的博客 解决 Nautilus 自定义终端插件安装依赖问题 | 姓王者的博客 OpenClaw 该熄火了 | 姓王者的博客 Vite8 - 统一的基建开始 | 姓王者的博客 Astro 6 推出啦 | 姓王者的博客 ubuntu的openvpn异常暂停推送更新 | 姓王者的博客 Ubuntu 24.04 安装 Win10 虚拟机 | 姓王者的博客 ESA-后记:热爱阿里云 | 姓王者的博客 Moonbit 0.8.0 重大发布,我也要改一下我的包 | 姓王者的博客 ESA Pages 边缘开发大赛获奖 | 姓王者的博客 Astro: 优化katex,mermaid和灯箱使用 | 姓王者的博客 从edgeone迁移到esa | 姓王者的博客 出租人类:AI时代的荒诞与真实 | 姓王者的博客 Astro 5.17构建性能优化实践:从18s到13s | 姓王者的博客 Moonbit License Checker 开发使用 | 姓王者的博客 Stalux Astro博客主题自荐 | 姓王者的博客
数据库原理-设计技巧 | 姓王者的博客
作者:xingwangzhe · 2025-09-20 · via 姓王者的博客

数据库原理-设计技巧

🕒 阅读时间:2 分钟 📝 字数:463 👀 阅读量: Loading...

:::tip

含有ai生成内容

AI整理文本

:::

ER 模型设计技巧总结

1. 概念建模:实体集 vs. 属性

  • 原则:当一个概念需要存储多个值、具有结构化信息,或未来可能扩展时,应将其建模为独立的实体集,而非简单的属性。
  • 示例:雇员地址。如果地址是单一、非结构化的(如字符串),可作为属性;但若需记录多个地址或结构化信息(如省、市、街道),则应抽象为“地址”实体集,便于查询和管理。
  • 好处:支持灵活查询和扩展,避免属性复杂化。

2. 概念建模:实体集 vs. 联系

  • 原则:当简单的二元联系无法表达复杂业务逻辑(如多次发生、特定上下文或冗余属性)时,应引入新实体或转换为更高阶联系。
  • 案例一:雇员在部门多次任职。简单的多对多联系无法区分多次记录(SSN 和 DID 会重复)。解决方案:引入“WORKIN”实体,将二元联系转换为三元联系,并添加时间属性(如 from_date, to_date)作为标识符,实现唯一区分。
  • 案例二:经理管理多个部门且财务权限一致。将财务信息作为联系属性会导致冗余。解决方案:引入“委派”或“审批权限”实体,将权限分组,降低冗余并简化修改。
  • 案例三:学生选课成绩。成绩是单值、非多值,应建模为联系属性,而非独立实体。
  • 好处:消除冗余,提高数据一致性和管理效率。

3. 联系类型选择:多个二元联系 vs. 一个 N 元联系

  • 原则:三元联系的强约束可能过于严格,难以满足复杂业务需求。将三元联系拆分为多个二元联系,能更灵活地施加独立约束。
  • 示例:雇员、保险、家属的三元联系。三元联系可能暗示家属是弱实体,且每份保险至少涉及一位家属,导致不恰当的副作用。
  • 优化方案:拆分为二元联系,如雇员-保险(全参与,1:1)、保险-家属(1:N)、家属-雇员(可选)。这能清晰表达“一个保险只能由一个雇员购买”、“每位家属只对应一份保险”等约束。
  • 好处:提高模型灵活性,避免强约束带来的设计难题,更好满足独立业务需求。

总体考量

  • 灵活性优先:优先选择能满足复杂约束的方案,避免过度简化导致的数据冗余或约束过强。
  • 业务驱动:设计应基于实际业务逻辑,确保模型能准确反映现实世界。
  • 迭代优化:在设计过程中,不断评估和调整,以平衡简洁性和准确性。

这些技巧是 ER 模型设计的基础,有助于构建高效、可维护的数据库结构。