数据库设计 - 暴露主键

Dun*_*can 2 database-design

想象一下,我有一张Customer表.

在这个表中是一个ID列,主键int,Identity,所有爵士乐.我们的客户也有一个名字.

现在,如果我要在报告或电子邮件中发送信息,我的网站中有一个链接可以唯一地标识该客户,那么使用主键ID字段是一种好的做法吗?

我所有的直觉都告诉我这很可怕,并且代理ID应该只能用于数据库 - 并且永远不会以这种方式暴露给外部世界.

但我正在寻找将来可以使用的杀手论证,如果(当)提出这个案例.

思考?

Laz*_*rus 5

唯一标识符是唯一标识符,如果您已经在数据库表的主键中使用它,请使用它.创建另一个代理键将是多余的,除非您有GUID,例如对于输出格式来说太长.

---编辑----

考虑一下邮件引用,过去我已经创建了一个表,它跟踪了特定的邮件,以围绕响应构建指标.每个邮件记录使用GUID作为主键来保持其唯一性,并将该记录链接回客户记录,客户记录中的任何详细信息都不会呈现给链接的查看者.

如果您要提供客户详细信息,则需要访问控制,即使您对ID进行模糊处理,任何掌握该链接的人都可以访问该数据,并且在大多数系统中都是不可接受的.

我认为这个决定始于"这些数据需要多安全?" 并从那里继续前进.


Bob*_*Bob 5

我建议不要添加新字段,但也不要公开 Id。

创建一个表来存储您发送的电子邮件。包括 GUID 作为主键和 UserId 作为外键。在您提供给他们的 URL 中,链接回 GUID。然后,如果用户单击 URL,您可以根据 GUID 更新记录并指示用户何时访问该 URL。