sql - 制作名称列PK是不好的做法而不是ID?
问题描述
我最近被要求检查数据库结构并提出可能更专业地描述数据库的更改。我正在浏览表格脚本并遇到了一个开发人员创建的表格,但以非常奇怪的方式(至少对我而言)。他没有创建任何 ID 列来唯一标识记录,而是将该name
列设置为 PK 并在子表中引用它,这对我来说很奇怪,因为我以前从未使用过这种做法。
这是数据库的结构:
CREATE TABLE egc_manufacturer
(
manufacturer_part_number varchar(500) not null,
manufacturer_number varchar(500) not null,
manufacturer_name varchar(500) default null,
supplier_contact varchar(200) default null,
supplier varchar(50) default null,
insertion_timestamp timestamp(0) default current_timestamp,
cmrt_supplier_contact varchar(200) default null,
primary key (manufacturer_part_number, manufacturer_number)
);
我强调添加一列ManufacturerID
并将其作为主键并将其用作子表中的外键,因为这对我来说似乎是更专业的方法。
我只是想知道我的建议是否真的会对设计产生一些影响,即使不会提高性能?我应该要求他们改变桌子设计还是让它改变?希望有人能解释一下。
解决方案
制造商和零件编号之间可能存在多对多关系。所以,这对我来说就像一个连接表,它解决了多个制造商具有相同部件号的问题。从某种意义上说,manufacturer_number 就是manufacturerID。我希望manufacturer_number 是另一个表中的PK,跟踪每个制造商的更详细信息。
长话短说,如果我上面描述的实际上是这张表的目的,我认为没有问题。
推荐阅读
- wpf - 在匹配指定绑定约束的 Cefsharp.Wpf.ChromiumWebBrowser 上调用构造函数引发异常
- java - JPanel 循环绘制图表。Swing gui 需要帮助
- gatling - 通过顺序 http 请求在 Gatling 中实现用户行为
- android - 当我们在 androidStudio 中添加一个新的 kotlin 类/文件以及主要活动时,我们会得到与 kotlin 类/文件相关的 xml 文件。但
- linux - 无法访问文件
- python - 如何使带有变量的 Django url 模板找到正确的 url
- android - 如何从 arrayadapter 中获取值以将其传递给另一个活动
- java - 如何匹配字符串中任何位置的非单词字符?
- asp.net-core - 身份核心,持久登录不是持久的
- css - 当用户在 Django i18n 翻译中更改语言时如何提供不同的 CSS 文件