数据库设计: Default Address

标签 database database-design default-value addressbook

我的数据库有一个组织表和一个地址表。在地址表中,我想存储用户 ID 和组织 ID,以便稍后查找这些内容,并且还可以为组织提供多个地址,或者让用户能够选择他们为不同组织添加的地址。这里的一个例子是,如果两个组织共享相同的属性(property)。我还希望我的组织表存储默认地址 ID。然而,在 FuelPHP 中使用 ORM 模型时,这被证明很尴尬(可能无关紧要,它只是让我注意到可能的设计缺陷)。

以上是一种选择,我还能想到另外两种解决方案。一是有一个默认地址表存储组织ID和地址ID,地址表仍然可以存储用户和组织ID。然后,我可以从组织表中选择内联默认地址表,并内联地址表中的地址 ID 以检索地址。

第二个选项是在我的地址表中有一个默认地址字段,类型为 bool。然后,我在需要时使用 select 中的 where 语句来检索该地址。

第二个选项是我目前的首选选项,因为这意味着我不必做太多工作来更改表、添加键以及在 PHP 框架 ORM 模型中设置关系。但是,如果数据库变得更大并且性能成为问题,那么以下哪种方法最好?还有其他我没有考虑过的方法吗?

最佳答案

听起来组织和地址之间有 m:m(多对多)关系。因此,在数据库中表示这种关系的最佳方法是引入一个新的表来表示这种关系。

我不确定您的意思是指给定公司的默认地址,还是创建公司时给定用户的默认地址。在第一种情况下,您可以将其添加为表示关系的新创建表的属性。在后一种情况下,您可以在用户表中放置一个外键,代表默认地址。

关于性能,使用整数键并建立适当的索引......!也就是说,跳过关系表并在同一地址上为不同公司创建相似的地址当然会更快。这将为您节省一次公司+地址查找的连接。但是,如果您需要查找给定地址上的所有公司,这会慢得多,因为您必须读出不同的地址并比较它们。

所以这完全取决于您想如何使用数据。我会选择“正确”选项(一个新的关系表),因为使用正确的索引并不会慢很多,而且以后它会给你更多的可能性。

下一个问题是如何让新用户选择现有的地址,而不是创建重复的条目。这将是您的界面设计中的一个挑战,并且您收集的数据的质量将在很大程度上取决于它。

关于数据库设计: Default Address,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10001603/

相关文章:

mysql - 为什么我无法获取某个日期范围内的记录?

database-design - 在数据库中存储行之间的顺序的最佳方法是什么?

database-design - 订阅计费的数据库设计

database - 表 oracle 锁定

generics - 如何获取 Scala 中类型的默认值?

scala - Scala主函数的默认参数?

php - 从txt文件中提取数据并插入数据库

database - 有没有办法在 XQuery 中获取 MarkLogic 服务器中的所有数据库名称?

database - 如何清空redis数据库?

SQL Server 查询添加具有默认值的列