浏览完本文后:

在设计数据库时使用外键似乎是个好主意.但是你什么时候用得太多了呢?

例如,假设我有一个主表,用于存储其他程序通过以下列引用的机械零件信息列表:

  1. ID号
  2. 名字
  3. colored颜色
  4. 价格
  5. 计量单位
  6. 类别

我是否应该制作包含所有可能 colored颜色 、单位和类别列表的表格,然后将其设置为机器零件信息表格中相应列的外键?在什么情况下,使用外键的好处会抵消我正在制作所有这些额外的表和关系这一事实?

推荐答案

如果您希望能够确定地声明数据库中只存在已知的有效值,那么任何属性都应该使用外键进行保护.否则,您只能希望在应用程序代码和将来创建的任何接口中捕获无效值.

拥有更多的表和关系并不是一件坏事.唯一的问题--通常不是问题--与维护用于实施这些关系的索引的开销有关.在遇到性能问题之前,您应该为"应该"有外键关系的每个列创建一个外键关系(因为需要根据列表验证值).

在我愿意牺牲正确性来换取性能之前,性能方面的考虑必须是相当可怕的.

Database相关问答推荐

为什么postgres枚举需要4个字节?

递归关系的数据库设计

用于存储食谱的数据库设计

查询最后一天、上周、上个月SQLite

基于邮政编码的纬度和经度

我需要在这个 Django 模型中添加一个 db_index 吗?

将 XML 存储在数据库中是否不好?

在 SQL 中与 NULL 值连接

我什么时候应该考虑使用内存数据库,需要注意什么问题?

有人可以详细解释 SOLR requestHandlers 和 responseWriters 吗?

如何在我的 SQL Server 代理作业(job)中创建一个将运行我的 SSIS 包的步骤?

为 PHPMyadmin DB 自动生成数据库图?

获取数据库路径

何时在关系数据库中使用枚举或小表?

ORM 还是Vietnam of Computer Science吗?

从原始物理文件中恢复 postgreSQL 数据库

在连接表中,Rails 缺少组合键的最佳解决方法是什么?

为什么在数据库设计中使用一对一的关系?

Data Mapper 是不是比 Active Record 更现代的趋势

是否有用于 postgresql 的数据可视化工具,它也能够显示模式间关系?