一尘不染

SQL如何将一列拆分为多个变量列

sql

我正在使用MSSQL,试图将一个 字符串 列拆分为多个列。字符串列具有以分号分隔的数字,例如:

190230943204;190234443204;

但是,某些行的编号比其他行多,因此在数据库中您可以拥有

190230943204;190234443204;
121340944534;340212343204;134530943204

我已经看到了一些解决方案,可将一列拆分为特定数量的列,但不能拆分为可变列。数据较少的列(用逗号分隔的2串字符串而不是3)将在第三位具有空值。

有想法吗?让我知道是否必须澄清任何事情。


阅读 151

收藏
2021-05-23

共1个答案

一尘不染

将此数据拆分为单独的列是一个很好的开始(逗号分隔的值是一个异端)。但是,通常应将“可变数量的属性”建模为一对多关系

CREATE TABLE main_entity (
  id INT PRIMARY KEY,
  other_fields INT
);

CREATE TABLE entity_properties (
  main_entity_id INT PRIMARY KEY,
  property_value INT,
  FOREIGN KEY (main_entity_id) REFERENCES main_entity(id)
);

entity_properties.main_entity_id是一个外键main_entity.id

恭喜,您处在正确的道路上,这称为规范化。您即将到达第一范式。

但是,请注意,这些属性应具有明显相似的性质(即所有电话号码或地址等)。不要陷入阴暗面(也称为Entity-Attribute-
Value反模式
),并极易将所有属性扔到同一张表中。如果可以识别几种类型的属性,请将每种类型存储在单独的表中。

2021-05-23