我正在使用MSSQL,试图将一个 字符串 列拆分为多个列。字符串列具有以分号分隔的数字,例如:
190230943204;190234443204;
但是,某些行的编号比其他行多,因此在数据库中您可以拥有
190230943204;190234443204; 121340944534;340212343204;134530943204
我已经看到了一些解决方案,可将一列拆分为特定数量的列,但不能拆分为可变列。数据较少的列(用逗号分隔的2串字符串而不是3)将在第三位具有空值。
有想法吗?让我知道是否必须澄清任何事情。
将此数据拆分为单独的列是一个很好的开始(逗号分隔的值是一个异端)。但是,通常应将“可变数量的属性”建模为一对多关系。
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_properties.main_entity_id
main_entity.id
恭喜,您处在正确的道路上,这称为规范化。您即将到达第一范式。
但是,请注意,这些属性应具有明显相似的性质(即所有电话号码或地址等)。不要陷入阴暗面(也称为Entity-Attribute- Value反模式),并极易将所有属性扔到同一张表中。如果可以识别几种类型的属性,请将每种类型存储在单独的表中。