我正在使用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_id
是main_entity.id
的foreign key。恭喜,您处在正确的路径上,这称为normalisation。您即将到达First Normal Form.
但是,请注意,这些属性应具有明显相似的性质(即所有电话号码或地址等)。不要掉进黑暗的一面(也就是Entity-Attribute-Value anti-pattern),并倾向于将所有属性都放在同一个表中。如果可以识别几种类型的属性,请将每种类型存储在单独的表中。