作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 MSSQL,尝试将一个字符串列拆分为多个列。字符串列包含用分号分隔的数字,例如:
190230943204;190234443204;
但是,某些行的数字比其他行多,因此在数据库中您可以拥有
190230943204;190234443204;
121340944534;340212343204;134530943204
我见过一些将一列拆分为特定数量的列的解决方案,但没有看到可变列。数据较少的列(由逗号分隔的 2 系列字符串,而不是 3 个)将在第三位出现空值。
想法?如果我需要澄清任何事情,请告诉我。
最佳答案
将这些数据拆分为单独的列是一个非常好的开始(逗号分隔的值是异端邪说)。但是,“可变数量的属性”通常应建模为 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
是 foreign key到main_entity.id
。
恭喜你,你走在正确的道路上,这就是 normalisation 。您即将到达First Normal Form.
但是,请注意,这些属性应该具有明显相似的性质(即所有电话号码或地址等)。不要陷入黑暗面(又名 Entity-Attribute-Value anti-pattern ),并试图将所有属性放入同一个表中。如果您可以识别多种类型的属性,请将每种类型存储在单独的表中。
关于SQL如何将一列拆分为多个变量列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17414632/
我是一名优秀的程序员,十分优秀!