gpt4 book ai didi

mysql - 存储具有 1 个值或 2 个值的一列的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-29 00:36:43 24 4
gpt4 key购买 nike

我的表中有一列可以在一条记录中存储一个值或两个值。

例如,我有一个用户表,他们可以存储一个或两个地址。请注意,他们不能存储超过两个地址,这是有限制的。

我有两种方法:

1- Set two column in my table for two value.
2- Create another table for 2nd value.

我需要帮助才能找到最佳方法。

最佳答案

1- Set two column in my table for two value. 2- Create another table for 2nd value.

这取决于你的实际数据。首先,你应该对database design principles有一个基本的了解。和 normalization .规范化主要是为了节省空间并帮助确保数据一致性。

对于您的具体问题:您说您有两个 并且一条记录可以存储其中的一个或两个。让我们假设该值是原始类型,如 INT。在这种情况下,我会使用一个包含两列的表格:

CREATE TABLE dataTable (
first INT NOT NULL,
second INT
);

这个表可以存储一个数字(first)和一个可选的second 数字。我省略了一个主键,实际上您应该添加它。

现在,你说你想存储地址address 不是原始类型,因为它通常由名字、姓氏、街道、邮政编码、城市以及一些附加信息组成,具体取决于您所在的位置。

同样,直接的方法是简单地创建一个包含两组数据的表:

CREATE TABLE dataTable (
firstName VARCHAR(40),
lastName VARCHAR(40),
street VARCHAR(40),
zipCode INT,
firstName2 VARCHAR(40),
lastName2 VARCHAR(40),
street2 VARCHAR(40),
zipCode2 INT
);

但是,这种方法不够灵活,而且可能会浪费空间。在这种情况下,我将分离(“规范化”)架构并使用两个表:

CREATE TABLE address (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
firstName VARCHAR(40),
lastName VARCHAR(40),
street VARCHAR(40),
zipCode INT
);

CREATE TABLE dataTable (
first INT NOT NULL,
second INT,
FOREIGN KEY (first) REFERENCES address(id),
FOREIGN KEY (second) REFERENCES address(id)
);

通过这种方法,您可以在数据表中存储(“引用”)一个或两个地址。缺点当然是在创建新记录时需要将数据插入到两个表中,并且需要在查询中正确连接表。但是,它允许您添加其他约束,例如定义名字是可选的,但姓氏是强制性的(“NOT NULL”)。这对于第一种方法是不可能的,因为您无法区分整个(第二)地址是可选的还是只有名字是可选的。

notice they can't store more than two address,It's limit.

嗯 - 是的,直到您的客户回来并需要存储三个 :-)

关于mysql - 存储具有 1 个值或 2 个值的一列的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13947022/

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