Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将不同的数据存储在同一列(SQL)中是一种好做法吗_Sql - Fatal编程技术网

将不同的数据存储在同一列(SQL)中是一种好做法吗

将不同的数据存储在同一列(SQL)中是一种好做法吗,sql,Sql,我目前有一个Users表,其中包含以下列: 用户ID 住址 目前,我们正在地址列中存储IP地址。接下来,我们需要存储一个MAC地址。将它们都存储在同一列中是否是一种好的做法两者都是varchar,并且有另一列指示它是什么类型的typeOfAddress int,1或2表示地址类型。或者我应该创建一个单独的可空列并将现有列也更改为可空列不,这不是一个好的做法。几十年前,我被告知的第一件事是“一个计算机领域不应该被用于一个以上的目的”。否则,原则上您无法知道它的含义,除非您有另一个指示符字段,您也可

我目前有一个Users表,其中包含以下列:

用户ID 住址
目前,我们正在地址列中存储IP地址。接下来,我们需要存储一个MAC地址。将它们都存储在同一列中是否是一种好的做法两者都是varchar,并且有另一列指示它是什么类型的typeOfAddress int,1或2表示地址类型。或者我应该创建一个单独的可空列并将现有列也更改为可空列

不,这不是一个好的做法。几十年前,我被告知的第一件事是“一个计算机领域不应该被用于一个以上的目的”。否则,原则上您无法知道它的含义,除非您有另一个指示符字段,您也可以将其用于其他值类型,并且您引入了完全不必要的误解风险。

不,这不是好的做法。几十年前,我被告知的第一件事是“一个计算机领域不应该被用于一个以上的目的”。否则,原则上您无法知道它的含义,除非您有另一个指示器字段,您也可以将其用于其他值类型,并且您引入了完全不必要的误解风险。

建议采用这种结构:

用户ID 地址类型 住址 因为它在第三个NF

在一个表中简单使用多列的缺点如下:

每当对地址进行筛选时,需要记住null句柄 随着时间的推移,随着新地址类型的加入,这种范式可能会扩展到超出意义的范围;但转换成本太高,无法想象。 应使用FK关系添加AddressType表,以防止意外输入看起来有效但无效的AddressType


从理论上讲,最好的方法是为每个AddressType创建一个单独的表,通过UserId链接到用户表;但这看起来确实有点过分了。

建议采用以下结构:

用户ID 地址类型 住址 因为它在第三个NF

在一个表中简单使用多列的缺点如下:

每当对地址进行筛选时,需要记住null句柄 随着时间的推移,随着新地址类型的加入,这种范式可能会扩展到超出意义的范围;但转换成本太高,无法想象。 应使用FK关系添加AddressType表,以防止意外输入看起来有效但无效的AddressType


从理论上讲,最好的方法是为每个AddressType创建一个单独的表,通过UserId链接到用户表;但这看起来确实有点过分了。

绝对要创建一个单独的可空列。它将使您将来在这个表上编写所有SQL变得更加容易,并使所有内容总体上更易于维护。

绝对要创建一个单独的可空列。这将使您在这个表上编写所有未来的SQL变得更容易,并使所有内容总体上更易于维护。

如果您不认为您将添加更多不同类型的地址,我更倾向于使用两列。我认为它在概念上更简单,查询起来也更简单。但是,如果你认为你将要添加更多类型的地址,不管是什么,拥有5或6个不同的列可能并不理想。在这种情况下,我将使用一个地址列和一个地址类型列,并创建一个定义地址类型的连接表。

如果您不认为要添加更多不同类型的地址,我会选择使用两个列。我认为它在概念上更简单,查询起来也更简单。但是,如果你认为你将要添加更多类型的地址,不管是什么,拥有5或6个不同的列可能并不理想。在这种情况下,我将使用一个地址列和一个地址类型列,并创建一个定义地址类型的连接表。

好的,根据给出的信息,这取决于

用户是否同时拥有IP地址和MAC地址?如果是这样,则需要将这些记录放在一个单独的表中,该表与用户记录具有外键关系

检索呢?在检索有关用户的数据时,是否经常需要检索这些值?如果它们这样做了,那么将它们存储在同一个表中并避免每次都进行表联接可能是有意义的


我倾向于使用两个单独的列,一个用于IpAddress,另一个用于MacAddress。这样,就可以清楚地知道哪列中有哪些数据,而无需对照另一列进行查找。

好吧,根据给出的信息,这取决于

用户是否同时拥有IP地址和MAC地址?如果是这样,则需要将这些记录放在一个单独的表中,该表与用户记录具有外键关系

检索呢?你经常使用这些值吗 检索有关用户的数据时是否需要检索?如果它们这样做了,那么将它们存储在同一个表中并避免每次都进行表联接可能是有意义的


我倾向于使用两个单独的列,一个用于IpAddress,另一个用于MacAddress。这样,就可以清楚地知道哪些数据在哪一列中,而无需对照另一列进行查找。

创建新的表地址和地址类型,而不是创建新的列,并链接到以下列:

Users
foreign key address_id

Address
id
value (varchar)
foreign key adress_type_id

AddressType
id
name (varchar)

可能有些过分,但这是一种很好的规范化做法,创建一个新的表地址和地址类型,链接到以下内容,而不是创建新的列:

Users
foreign key address_id

Address
id
value (varchar)
foreign key adress_type_id

AddressType
id
name (varchar)

可能有点过分,但这是一个很好的规范化实践

就我个人而言,我会创建两个单独的列,但是,无论哪种方式,您获取数据的查询都可能具有相同数量的子句,即MACAddress不为NULL或typeOfAddress='MAC',只要遵循最不意外的原则:如果该列被称为Address,则它应该存储一个地址-没有其他,没有更多,也没有更少。使用一个列存储不同类型的数据是令人困惑的,而且容易出错。别这么做-有什么意义?使用一列MacAddress和另一列IPAddress,所有内容都很清楚-对于您以及以后需要阅读、理解和修复代码的任何人来说…此处的正确答案将取决于您的查询。任何一种设计都是可以接受的——只要您的查询是一致的。重要的是,哪种范式对您和其他必须访问它的人更有意义?哪一个对消费应用程序更有意义?我个人会创建两个单独的列,但是,无论哪种方式,您获取数据的查询都可能具有相同数量的子句,即MACAddress不为NULL或typeOfAddress='MAC',只要遵循最不意外的原则:如果该列被称为Address,则它应该存储一个地址-没有其他,没有更多,也没有更少。使用一个列存储不同类型的数据是令人困惑的,而且容易出错。别这么做-有什么意义?使用一列MacAddress和另一列IPAddress,所有内容都很清楚-对于您以及以后需要阅读、理解和修复代码的任何人来说…此处的正确答案将取决于您的查询。任何一种设计都是可以接受的——只要您的查询是一致的。重要的是,哪种范式对您和其他必须访问它的人更有意义?哪一个对消费应用程序更有意义?我同意这不是一个好的做法。但给出一个原因,而不是别人曾经说过的话,会是一个更好的答案。我同意这不是一个好的做法。但给出一个原因,而不是别人曾经说过的,会是一个更好的答案。