SQL

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

发布于 2021-04-20 23:06:44

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是子项,如果子项记录被删除,那么我无法自动删除父项(电话)记录。

关注者
0
被浏览
71
1 个回答
  • 面试哥
    面试哥 2021-04-20
    为面试而生,有面试问题,就找面试哥。

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

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

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

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

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看