sql - 对此 ERD 的一部分进行建模的不同方法
问题描述
我有一个非常简单的表格图,来自对我的应用程序进行建模。问题是我第二次猜测 Vendor 和 VendorOrder 之间的关系。VendorOrders 表应存储系统中的所有供应商订单。要获得某个公寓的所有订单,您只需使用 PK 和 FK 关系来收集该数据。整体设计有什么我应该改进的吗?
图表:
解决方案
我认为您可以通过做三件事来改善这一点。
- 在您的 Apartment 和 Resident表之间创建一个名为 ApartmentResidents 的交集表,其中每个表引用具有一对多关系的交集表。在这个 ERD 中,它只允许一个居民注册到公寓。如果居民在此数据库的整个生命周期内居住在多个公寓中,您需要将他们注册为全新的居民。 交点表示例
- 在您的供应商表中,我不会使用名称作为主键,而是创建一个 id。使用具有实际价值的东西作为主键可能会因为多种原因而变得混乱:
- 如果两个供应商具有相同的名称,例如“Johnson's Repair”,则您需要将其中一个拼写错误才能成为有效的密钥。
- 如果您拼写了供应商的名称,您还将在外键表中包含对该拼写错误的引用(如果您为正确的拼写执行选择查询,这也可能使其不会显示在结果中)。
- 将索引放在字符串上的性能不如将索引放在自动递增的整数键上。
- (可选)我通常将我的数据库表命名为复数形式,例如“Apartments”或“Vendors”。它使 SQL 语法读起来更像是查询中的一个句子。如果我没记错的话,这也是 SQL 的创建者在语法设计中所追求的事情之一。
推荐阅读
- batch-file - 在批处理文件中动态获取输入文件以对其执行操作
- r - 如何组合具有不同输入的行
- regex - 遍历一组数字并获得所有可能的匹配项
- php - 我们如何在电子邮件签名中嵌入 iframe
- android - 如何从 /vendor/app 启动 android-TREBLE 兼容的供应商 java 服务
- node.js - Chrome 检查未显示 Node 应用程序、调试器
- angular - 在 D3 中构建和显示 DAG(有向无环图)
- javascript - 请帮我弄清楚 Array concat() 方法并编写纯 Javascript 代码
- javascript - 使用 AJAX 单击提交按钮后刷新 div,而不是页面
- jmeter - Jmeter是否仍然存在协调遗漏问题?