sql - 为什么要在列名中指定主/外键属性

标签 sql naming-conventions foreign-keys

最近的几个问题讨论了命名列的策略,我很惊讶地发现将外键和主键的概念嵌入到列名中的概念。那是

select t1.col_a, t1.col_b, t2.col_z
from t1 inner join t2 on t1.id_foo_pk = t2.id_foo_fk

我必须承认我从来没有在任何使用这种方案的数据库系统上工作过,我想知道有什么好处。在我看来,一旦您了解了系统的 N 个主要表,您将使用这些表编写多个数量级的请求。

为了提高开发效率,您需要了解哪些表是重要的表,哪些是简单的支流。您需要将大量列名提交到内存中。其中一项基本任务是将两个表连接在一起。为了减少学习的努力,最简单的方法是确保两个表中的列名相同:
select t1.col_a, t1.col_b, t2.col_z
from t1 inner join t2 on t1.id_foo = t2.id_foo

我认为,作为开发人员,您不需要过多地提醒您哪些列是主键,哪些是外键,哪些不是。如果您很好奇,可以很容易地查看模式。当随机看
tx inner join ty on tx.id_bar = ty.id_bar

...知道哪个是外键那么重要吗?外键仅对数据库引擎本身很重要,以确保参照完整性并在更新和删除期间做正确的事情。

这里正在解决什么问题? (我知道这是一个讨论的邀请,并且可以随意这样做。但与此同时,我正在寻找答案,因为我可能真的错过了一些东西)。

最佳答案

我同意你的看法。将此信息放在列名中有点像早期 Windows 时代糟糕的匈牙利符号白痴。

关于sql - 为什么要在列名中指定主/外键属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/214045/

相关文章:

c# - sql_variant 的大小限制超过

http - 查询字符串之前的 URL 部分的名称是什么?

c# - Entity Framework (数据库优先)对同一表命名约定控制的多重关系

laravel - 一般错误 : 1824 Failed to open the referenced table

php - 如何解决我的编译器警告

sql - 根据列过滤掉行中的重复项

sql - 不能在里面有 CREATE TABLE if else

linq-to-sql - Linq2sql 命名约定

hibernate - 无法设置 Hibernate 中的通用生成器参数

mysql - 错误 1005 (HY000) : Can't create table 'nortus.#sql-4e0_28' (errno: 150)