mysql - 我应该在数据库中创建与第二级子级的关系,什么是最佳的?

标签 mysql sql database core-data query-optimization

我有以下数据结构:

enter image description here

一个客户可以有多次访问,每次访问可以有多个订单,有些订单可以没有访问,直接链接到客户。

我应该以一对多关系将客户端链接到订单吗? 或者我应该删除该关系并创建一个虚拟访问来访问商店订单而无需访问。

列出所有订单的最佳性能解决方案是什么? getClient.getOrders 或 getClient.getVisits.getOrders

列出客户怎么样,如果客户有很多关系,会影响速度吗?

如果访问有订单,然后订单有付款,然后付款有多张发票,该怎么办?在这种情况下,我非常确定没有必要在客户和发票之间建立关系。

我正在使用基于 SQLite 的核心数据 (iOS)。由于核心数据非常慢,可能会切换到另一个解决方案。

最佳答案

我非常支持对现实世界进行建模。如果存在没有访问的订单,那么您不应该创建“虚拟”访问,只是为了将数据硬塞到未正确设计以匹配现实世界的结构中。当用户想要查看去年的访问次数时会发生什么?现在他们必须记住对那些“虚拟”访问打折扣。您应该考虑过早优化,因为这似乎也适用于此。

我将创建一个从“订单”到“客户”的外键,以及一个从“订单”到“访问”的外键,但使用 NULLvisit_id 以便外键是可选的。在许多数据库中,您还可以在访问中的 visit_idclient_id 上创建备用键(或唯一索引),然后使用订单中的外键。这样,如果它是没有访问的订单,则不会强制执行该行的外键。在 SQL Server 中,其中一列为 NULL 的事实足以告诉它不要强制执行该外键,但我不知道是否所有 RDBMS 都以相同的方式工作。如果不这样做,您可能必须使用索引 View 或其他一些复杂的方法来强制引用完整性。

关于mysql - 我应该在数据库中创建与第二级子级的关系,什么是最佳的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35655848/

相关文章:

mysql - 有关子查询和表连接的 SQL 帮助

sql - Ms Access 从子数据表收集数据

文本字段内的 MySQL 条件变量

mysql - XAMPP MySQL 问题

php - 获取此 MySQL 查询的最终值

php - mysqldump创建空sql文件? [Windows 上的 php 和 mysql]

mysql - 我想选择批处理 ID,其中包含从 SQL 表中提供的两个选定类(class)

database - CRUD 应用程序的基本 NMock 数据库示例

iOS - 对何时在我的应用程序中使用核心数据感到困惑

database - ROWID (oracle) - 它有什么用吗?