我的订单表中有2个字段。产品名称和产品级别。
示例升降机A,升降机A将升至1,2,3级。升降机B将升至4,5,6级
我想使用分隔符将值存储在产品名称和产品级别中。
如何以这种方式存储它们,更容易插入值并检索值并以表格格式显示它。
答案 0 :(得分:3)
答案简短:不,你不想这样做。切勿在一列中存储多个值。
相反,您应该在数据库中存储六个不同的行:
lift level A 1 A 2 A 3 B 4 B 5 B 6
这样可以轻松存储和检索行。
答案很长:数据库引擎旨在快速查找和提供信息。其中一个关键因素是索引。
想想像电话簿这样的数据库索引。例如,如果你想找一个名字“Flintstone”,你首先要跳到“F”部分,然后查找“Fl”,然后是“Fli”等。数据库索引也是如此。
现在,按照相同的例子,如果你想找到包含字符“lint”的每个人的名字怎么办?您无法使用索引,因为虽然可能有一个名称“Flintstone”,但很可能是“Clinton”,可能是“Splinter”。你唯一的办法是查看每个试图找到你的字符串的名字。
后一个例子正是通过在单个列中存储“1,2,3”(或“1; 2; 3”或甚至“123”)值而最终得到的结果。如果你想知道哪个升力与2级匹配,你不能在没有先提取值“1,2,3”的情况下这样做,然后在里面寻找2的匹配。
当联接发挥作用并且每个级别有更多信息时,这变得更加困难。例如,如果您有一个表“level_names”,它存储了每个级别的名称。如果你有“1,2,3”模式,那么当你加入这个表时你想要一个结果行? “A”,“1,2,3”,“First,Second,Third”?现在如果名称包含逗号怎么办?您将为自己设置一个解析噩梦并在应用程序中执行比应有的更多繁重工作(数据库引擎,无论他们可以还是不能本地这样做,真的不是为这种字符串/输出操作而设计的)