Mysql 在这种情况下,GUID是地址的良好参考键吗?
我目前在一家建筑管理软件公司工作,在为我的数据库设计架构时遇到了一个问题(如下所述),该数据库目前包含四个表,即员工表、地址表、用户表和许可证 造成混淆的表格是员工和地址;下面提供了代码 为了维护数据的完整性,我没有在employee表中存储任何从地址派生的词汇,例如Address1、Address2、城市、州、县等;因为我主观上认为,不唯一标识特定员工的属性最好成为另一个表的一部分。现在我的问题是:Mysql 在这种情况下,GUID是地址的良好参考键吗?,mysql,database,relationship,Mysql,Database,Relationship,我目前在一家建筑管理软件公司工作,在为我的数据库设计架构时遇到了一个问题(如下所述),该数据库目前包含四个表,即员工表、地址表、用户表和许可证 造成混淆的表格是员工和地址;下面提供了代码 为了维护数据的完整性,我没有在employee表中存储任何从地址派生的词汇,例如Address1、Address2、城市、州、县等;因为我主观上认为,不唯一标识特定员工的属性最好成为另一个表的一部分。现在我的问题是: 使用a作为地址表的主键是否是一个好的选择 如果是,是否有可能是阻止快速查询的因素 我选择使
- 使用a作为地址表的主键是否是一个好的选择
- 如果是,是否有可能是阻止快速查询的因素
- 错误地介绍FK!=PK,这将导致表之间的关系不良
我应该创建一个int类型的变量,比如说var I=0,每次我插入一个employee->将该变量增加一个->将其分配给FK还是?为了在employee和地址之间进行多对多关联,您需要这样的东西(地址类型将类似于家庭、工作、账单、旅行等)。然后,您可以创建其他实体表来跟踪这些实体和地址之间的关联。在表
employee\u Address
中,这些列将是其相关表的外键
至于使用GUID
s vsINT
作为主键,数值的读取速度比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
顺便说一句,varchar(1)似乎是一个愚蠢的想法。您觉得如何添加一个表来放置员工和地址之间的关系?f.e.带有2 FK:(Id,employeeId,AddressId)。地址表可以简化。您的员工和地址表都将有自己的主键。然后,您的地址表将有一个外键,该外键保存关联员工记录的主键。问题是什么?1中没有太多的“var”,是吗?在这种情况下,Char对meI更为合理rry如果这个问题看起来很傻,但为什么我需要地址类型?它代表什么?请你再详细说明一下好吗?PS:整体上看,这个方法比我的好。答案是这样的,但地址类型允许你具体说明:这是一个家庭地址,一个工作地址,用于计费,用于计算吗吃差旅费?你说你在建“施工管理软件”,你还需要像“工地地址”、“营业地址”这样的东西。完全正确,我没意识到你也注意到这些信息。这个答案对我帮助很大,我很感激。
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