gpt4 book ai didi

mysql - 在这种情况下,GUID 是地址的良好引用键吗?

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

我目前在一家建筑管理软件公司工作,在为包含四个表的数据库设计架构时遇到了一个问题(如下所述),目前,即员工地址用户许可证

造成混淆的表是employeeaddress下面提供的代码

为了维护 Physical integrity 在我的数据中,我没有在表 employee 中存储从 address 词法派生的任何内容,例如 Address1、Address2、City、State、County 等;因为我主观上认为,对于不能唯一标识特定员工的属性,将其作为另一个表的一部分会更好。现在我的问题出现了:

  • 使用 GUID 是个不错的选择吗? 作为 address 表的主键?
  • 如果是,是否有可能是阻碍快速查询的因素?

我选择使用 GUID 作为 PK 索引的原因是我别无选择。来自 addressEmployeeId 没有给我提供解决方案,因为我不能有一个字段既是 PK 又是 FK: see this .

CREATE TABLE employee(

employeeId INT
NOT NULL
CHECK(employeeId > 0),

firstname VARCHAR(20)
NOT NULL,

lastname VARCHAR(20)
NOT NULL,

sex VARCHAR(1)
NOT NULL,

birthdate DATE
NOT NULL,

addressId VARCHAR(30),

PRIMARY KEY(employeeId)
);

CREATE TABLE address(
addressId VARCHAR(30)
NOT NULL,

employeeId INT,

Address1 VARCHAR(120)
NOT NULL,

Address2 VARCHAR(120),

Address3 VARCHAR(120),

City VARCHAR(100)
NOT NULL,

State CHAR(2)
NOT NULL,

Country CHAR(2)
NOT NULL,

PostalCode VARCHAR(16)
NOT NULL,

PRIMARY KEY(addressId),

FOREIGN KEY(employeeId) REFERENCES employee(employeeId) ON DELETE SET NULL

);

ALTER TABLE employee
ADD FOREIGN KEY(addressId)
REFERENCES address(addressId)
ON DELETE SET NULL;

我很想知道是否有任何其他方法可以在不使用 GUID 的情况下在 employeeaddress 之间创建适当的关系。另一种方法是指定 (int) 值,但在这种情况下,缺点是:

  • 错误地引入 FK != PK,这将导致表之间的关系不佳。

编辑:

你们中的一些人在评论中建议将“UUID”索引更改为 AUTO_INCREMENT,但当我必须从我的 WPF 应用程序中插入员工时,问题就出现了。

来自 address 的 PK addressId 会自行增加。然后我应该将什么传递到 FK 中以保持关系紧密和正确?

我是否应该创建一个 int 类型的变量,比方说 var i = 0 并且每次我插入一名员工 -> 将该变量增加 1 -> 将其分配给 FK 或?

最佳答案

为了在员工和地址之间建立多对多关联(地址类型包括家庭、工作、账单、旅行等),您需要这样的东西。然后,您还可以创建其他实体表来跟踪这些实体和地址之间的关联。在表 employee_address 中,这些列将作为外键返回到它们的相关表。

至于使用 GUIDINT 作为主键,在 JOIN 上数值读取速度比字符串值快。根据数据量的大小,您可能需要在未来几年内从 INT 切换到 BIGINT

另外,给这些人一些空间来输入他们的名字。 20 个字符太短了,尤其是姓氏。

employee
--------
employee_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(255) NOT NULL,
lastname VARCAHR(255) NOT NULL,
gender BIT NOT NULL,
birthdate DATE NOT NULL

address
---------
address_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
address1 VARCHAR(255),
address2 VARCHAR(255),
address3 VARCHAR(255),
city VARCHAR(255),
state CHAR(2),
country CHAR(2)

address_type
--------------
address_type_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
address_type VARCHAR(255)

employee_address
-----------------
employee_address_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
employee_id INT,
address_id INT,
address_type_id INT

关于mysql - 在这种情况下,GUID 是地址的良好引用键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54410975/

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