Fakipo Asked: 2020-07-23 07:53:59 +0800 CST2020-07-23 07:53:59 +0800 CST 2020-07-23 07:53:59 +0800 CST Mysql:为具有许多表的大型项目创建数据库模式的步骤是什么? 772 我正在创建一个项目,其中包含许多表格,例如一个用于税收、一个用于员工、客户等。那么我应该怎么做呢?例如:首先构建 ER 模型或类似的东西 mysql database-design 1 个回答 Voted Best Answer bbaird 2020-07-23T08:50:35+08:002020-07-23T08:50:35+08:00 这些是我采取的步骤: 从一张纸开始,写下实体及其彼此之间的关系。用通俗易懂的语言写出关系,例如Customer places zero to many Orders。 一旦您知道您将拥有多少个实体以及它们的粗略关系,将该图形式化为层次结构图 - 这通常只是实体及其彼此之间的关系,而不是任何列或关键信息。 从层次结构的顶部开始,确定每个实体的属性并确定潜在的主键(候选键)。每个实体可能有不止一个。 此时不要创建/分配“id”或其他列,除非它们是由调用应用程序(InvoiceNumber等)创建的和/或普遍接受的做法,例如Person,Address。由外部机构(ISO、其他)提供的“代码”不仅是可接受的,而且是首选的 - CountryCd、CurrencyCd等。 再次从层次结构的顶部开始,从候选键列表中选择一个主键,然后将该主键迁移到所有其他相关实体。识别并列出所有必需的备用键。 创建初步的 ER 图。我会使用 IDEF1X,因为它易于阅读并且在现实世界中被普遍接受。如果您不熟悉 IDEF1X,请阅读此入门指南https://www.softwaregems.com.au/Documents/Documentary%20Examples/IDEF1X%20Notation.pdf 一旦你完成了你的草图,你就可以确定一个代理(“Id”)可能是合适的实例。我确定代理何时合适的经验法则是 a) 将单独的实体分组的子类型 b) 非常宽的键,以后不需要任何元素来实现引用完整性 c) 出于安全/隐私原因,需要隐藏数据。一旦您选择了代理项,它就会成为主键,而您现有的主键必须成为备用键。 最后一句话是关键。如果您使用代理项并且没有备用键,那么您将没有关系数据库。 如果存在必须通过事务或检查约束强制执行的规则,则可以将规则的简要描述分配并标记给适当的实体。 您现在有一个可用于构建物理模型的逻辑模型。物理模型将包括数据类型和您可能实现与逻辑模型不同的事物的任何实例(可选列的不同表等)。 现在您可以开始编写您的 DDL。 我还建议,当您设计数据库时,不要在每个实例中都使用“Id”列作为代理项,而是发现是否有适当/可接受的速记可以代替使用。因此,如果每个Order都有Status“已接收/处理中/已发货/已取消”,当您创建参考表时,可能会使用StatusCode类似“R/P/S/C”而不是无意义的数字“1/2/3/4”。不仅CHAR(1)存储空间比典型的少INT,针对数据库编写的任何查询/代码都更容易理解,并且您不太可能犯下为错误列使用错误数字的罪行。
这些是我采取的步骤:
Customer places zero to many Orders
。InvoiceNumber
等)创建的和/或普遍接受的做法,例如Person
,Address
。由外部机构(ISO、其他)提供的“代码”不仅是可接受的,而且是首选的 -CountryCd
、CurrencyCd
等。我还建议,当您设计数据库时,不要在每个实例中都使用“Id”列作为代理项,而是发现是否有适当/可接受的速记可以代替使用。因此,如果每个
Order
都有Status
“已接收/处理中/已发货/已取消”,当您创建参考表时,可能会使用StatusCode
类似“R/P/S/C”而不是无意义的数字“1/2/3/4”。不仅CHAR(1)
存储空间比典型的少INT
,针对数据库编写的任何查询/代码都更容易理解,并且您不太可能犯下为错误列使用错误数字的罪行。