我猜这个问题已经被问过很多次了,我只是很难理解其他人的设计。
我正在学习数据库设计,刚刚阅读了《凡人的数据库设计》,现在正在阅读另一本书——关于 MySQL 的 Paul Dubois 我很难理解如何在 mysql 中处理规范化数据。
在我们最初的 Access 数据库(设计糟糕!)中,我们有一个项目列表。其中包括各种字段,例如 Site_ID (PK)、项目代码、项目名称、项目经理、自治市镇、国家电网参考等。
Borough 和 National Grid 参考等字段可以有多个值。例如,该项目可能位于多个行政区,并且可能有多个国家电网参考,这些参考列在以逗号分隔的每个字段中。
例如自治市镇:纽汉、哈克尼 NGR:TQ 3692 8506、TQ 3768 8600、TQ 3756 8332、TQ 3880 8468
易于列出但难以搜索。因此,我将它们视为多值字段,并将它们从项目列表表中取出,并将它们放入名为 Borough_County 和 National_grid_Reference 表的自己的表中。
我对此有两个问题
第一个涉及密钥,第二个涉及我如何将数据显示给用户。
在凡人书中,似乎表明您从第一个表(项目)中获取主键并将其放入规范化表(自治市/县和 NGR)中。它使用相同的密钥。它还使用与外键相同的键。
项目表 Site_ID (PK)
项目代码
项目名称
等。
Borough_County 表 Site_ID
(来自项目的主键和外键)
Borough 或 County
National Grid Ref table
Site_ID(来自项目的主键和外键)
NGR_SQ
NGR_Easting
NGR_Northing
这对我来说没有意义,因为它具有 1:n 的关系。他们应该有自己的主键吗?
第二个问题是如何将规范化的表格显示给用户?
我了解您将规范化表和原始项目表再次放在“视图”中。
我想使用视图作为从各种规范化表中输入数据的一种方式。正如我们习惯在 NGR 中编写例如 TQ 3692 8506、TQ 3768 8600 等一样,您如何让数据库将值分离到正确的字段中?如果您在 TQ 和 3692 之间放置一个空格,它是否知道这是一个新字段?如果你在中间加一个逗号,它是否知道(你能告诉它)它是规范化表中的一条新记录吗?
或者我是否以完全错误的方式看待这一点,因为我习惯了 Excel 的做事方式?
感谢您的任何帮助。