gpt4 book ai didi

sql - 如何设计员工表、客户表和电话号码之间的关系?

转载 作者:搜寻专家 更新时间:2023-10-30 20:20:38 25 4
gpt4 key购买 nike

我有一个带有Client 表的关系数据库,包含idnameaddress,以及许多电话号码我有一个 Employee 表,还包含 idnameaddress 等,还有很多电话号码。

创建一个“电话号码”表并链接客户和员工,还是创建两个单独的“电话号码”表,一个用于客户,一个用于员工,是否更合乎逻辑?

如果我选择创建一张表,我可以为客户和员工使用一个外键还是必须制作两个外键?

如果我选择制作一个外键,我是否必须让客户 id 从 1 开始并递增 5,而员工 id 从 2 开始并增加 5,这样两个 id 就不会相同了吗?

如果我创建两个外键,一个有值而另一个允许空值吗?

最佳答案

我会采用的解决方案是:

CREATE TABLE Employees (
employee_id INT NOT NULL,
first_name VARCHAR(30) NOT NULL,
...
CONSTRAINT PK_Employees PRIMARY KEY (employee_id)
)

CREATE TABLE Customers (
customer_id INT NOT NULL,
customer_name VARCHAR(50) NOT NULL,
...
CONSTRAINT PK_Customers PRIMARY KEY (customer_id)
)

-- This is basic, only supports U.S. numbers, and would need to be changed to
-- support international phone numbers
CREATE TABLE Phone_Numbers (
phone_number_id INT NOT NULL,
area_code CHAR(3) NOT NULL,
prefix CHAR(3) NOT NULL,
line_number CHAR(4) NOT NULL,
extension VARCHAR(10) NULL,
CONSTRAINT PK_Phone_Numbers PRIMARY KEY (phone_number_id),
CONSTRAINT UI_Phone_Numbers UNIQUE (area_code, prefix, line_number, extension)
)

CREATE TABLE Employee_Phone_Numbers (
employee_id INT NOT NULL,
phone_number_id INT NOT NULL,
CONSTRAINT PK_Employee_Phone_Numbers PRIMARY KEY (employee_id, phone_number_id)
)

CREATE TABLE Customer_Phone_Numbers (
customer_id INT NOT NULL,
phone_number_id INT NOT NULL,
CONSTRAINT PK_Customer_Phone_Numbers PRIMARY KEY (customer_id, phone_number_id)
)

当然,模型可能会根据很多不同的事情而改变。员工也可以是客户吗?如果两名员工共享一个电话号码,当一名员工的电话号码发生更改时,您将如何在前端处理?它也会更改其他员工的号码吗?警告用户并询问他们想做什么?

最后几个问题不一定会影响数据的最终建模方式,但肯定会影响前端的编码方式以及您可能需要什么样的存储过程来支持它。

关于sql - 如何设计员工表、客户表和电话号码之间的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8055401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com