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

190230943204;190234443204;


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

190230943204;190234443204;
121340944534;340212343204;134530943204


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

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

最佳答案

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

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_idmain_entity.idforeign key

恭喜,您处在正确的路径上,这称为normalisation。您即将到达First Normal Form.

但是,请注意,这些属性应具有明显相似的性质(即所有电话号码或地址等)。不要掉进黑暗的一面(也就是Entity-Attribute-Value anti-pattern),并倾向于将所有属性都放在同一个表中。如果可以识别几种类型的属性,请将每种类型存储在单独的表中。

10-08 13:14