当前位置: 首页 > 面试题库 >

如何设置具有多个电话号码的客户表?-关系数据库设计

陶寒
2023-03-14
问题内容
CREATE TABLE Phone
(
phoneID - PK
.
.
.
);

CREATE TABLE PhoneDetail
(
phoneDetailID - PK
phoneID - FK points to Phone
phoneTypeID ...
phoneNumber ...
.
.
.
);

CREATE TABLE Customer
(
customerID - PK
firstName
phoneID - Unique FK points to Phone
.
.
.
);

一个客户可以有多个电话号码,例如手机,工作场所等。“客户”表中的phoneID是唯一的,并且指向“电话”表中的PhoneID。如果删除了客户记录,则“电话”表中的phoneID也应删除。

您对我的设计有任何疑问吗?这个设计合理吗?我的问题是客户表中的phoneID是子项,如果子项记录被删除,那么我无法自动删除父项(电话)记录。


问题答案:

由于mrjoltcola已经解决了标准化问题,因此我将解决在电话中有记录但在电话详细信息中没有记录的问题。

如果这是您唯一的问题,则可以使用三种方法:

1)不要从明细表中删除,而是通过CASCADE DELETE从电话中删除-使用单个SQL语句从两个表中删除并保持数据一致

2)在明细表上具有触发器,当从子级删除父级的最后一条记录时,该触发器将自动删除父级(这将无法很好地执行,并且会减慢表上所有删除的速度。这很丑陋。去做吧)

3)在应用程序的业务逻辑层中执行此操作-如果该层被正确隔离,并且用户(应用程序)仅通过该层来修改数据,则可能会达到所需的一致性保证级别



 类似资料:
  • 问题内容: 我有一个关于桌子设计的问题。我有一个应该认为可行的解决方案,但是没有。 考虑具有两个实体“ Subject”和“ Process”,它们都具有某些属性。每个“主题”可以与多个“进程”相关联。根据选择哪个“过程”,存在不同数量的实体“过程属性”。换句话说,当用户将“过程”与“主题”相关联时,他应该只能编辑专门链接到该“过程”的“属性”。 最终,我希望用户能够执行3件事: 创建新的“流程”

  • 账号表 用户表 员工信息表 user与account是一对多 user与employee是一对一 系统需要支持以工号、邮箱、手机号登录(手机验证码或密码) 在上述表设计中会存在一下问题 查询用户信息的时候需要显示邮箱、手机号、工号等信息,如果用户表中没有这些信息,则需要通过关联查询账号表,但是如果用户表中存在这些信息,则需要冗余这些字段,并且修改账号表数据时需要同步修改冗余字段 用户表与账号表是一

  • 问题内容: 我有4种类型的用户,每个都有具体的数据,但他们也分享COMMUN数据,如,.. 我的第一个想法是用列创建一个主表。然后,当查询用户数据时,我可以先选择它们,然后根据运行情况选择不同的查询来获取“用户类型”的特定数据。我对此并不满意,因为我希望我可以通过一个查询并最好使用外键来获取所有与用户相关的数据。 第二个想法是在表中没有列,而是使用外键,该键来自特定用户类型的表将指向主表的一行。尽

  • 我遵循这个示例检索联系人列表,从android设备检索联系人。它提供所有联系人,包括电子邮件联系人和一些空联系人。 我尝试修改Conrects合同,如在投影和选择,以获得移动联系人,但没有工作。 String SELECTION=Conrects合同。联系人。DISPLAY_NAME" 有没有办法只获得有手机号码的联系人?

  • 问题内容: 让我们说我需要设计一个数据库,该数据库将托管多个公司的数据。现在出于安全和管理目的,我需要确保正确隔离了不同公司的数据,但我也不想启动10个mysql进程来在10个不同的服务器上托管10个公司的数据。使用mysql数据库执行此操作的最佳方法是什么。 问题答案: 多租户数据库有几种方法。为了进行讨论,它们通常分为三类。 每个租户一个数据库。 共享数据库,每个租户一个模式。 共享数据库,共

  • 问题内容: 我正在建立一个网站,其中包含不同类型的项目,例如博客,帖子,文章等。用户可以将其中任何一个设置为他/她的最爱。现在,当我处理这个问题时,我有两个选择 为每种对象的用户收藏夹创建一个表。 为所有用户的所有类型的对象创建一个公用表。 第一种结构的问题是,我将不得不查询很多表以显示特定用户的收藏夹。但这将使我可以轻松地将收藏夹分为不同的类别。 但是,如果我必须在一个页面上显示所有收藏夹并将它