我正在设计一个数据库,用于交换汽车的网站。
Autos具有不同的属性和属性类型,如
“多媒体”,“安全”等类型的属性 用于检查ABS,Airbages,ESP等
我想以1和0组合的形式将所有这些属性保存在一个cloumn中
像
1001000101
但我的问题是,如果我更改数据库中属性名称的位置如何更新此组合“1001000101”?或者应该是最好的方法。
答案 0 :(得分:0)
您希望将所有标志放入单个列中会有什么好处,这会超过将它们作为单独的布尔属性的可维护性?
如果你的标志组相当稳定,我建议你至少启动,将它们建模为单独的布尔列,这将更容易管理。如果它能提供一些其他可衡量的好处,那么以后管理它们会更加复杂。
答案 1 :(得分:0)
尝试使用bit data type(请参阅storage requirements - 似乎更合乎逻辑,更简单的解决方案
答案 2 :(得分:0)
如果您希望以这种方式执行此操作并将属性保存在一个数据字段中,则将关系“attribute”更改为该位置必须导致数据的管理更新。由于数据库不知道这种关系,因此没有简单的方法来自动执行此更新。
每次发生此类事件时,您都必须执行此类操作。
基于这种表格的理论:
CREATE TABLE `yourtable` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`yourfield` varchar(16) DEFAULT NULL,
`backupfield` varchar(16) DEFAULT NULL,
PRIMARY KEY (`id`)
)
这可能如下所示:
UPDATE yourtable SET backupfield = yourfield;
如果您将位置3与7交换,它可能如下所示:
UPDATE yourtable
SET yourfield = CONCAT(
LEFT(backupfield,2), // everything left of first position
MID(backupfield,7,1), // old position 7
MID(backupfield,4,3), // everything between first and 2nd position
MID(backupfield,3,1), // old position 3
MID(backupfield,8)); // everything right of 2nd position
你有什么理由想这样做吗?如果没有具体原因,可以使用单独的字段(更简单)。
答案 3 :(得分:0)
除非您不必处理严重的性能问题,否则不应对数据库进行反规范化。
几年前我在一个主要的二手车市场工作,我们添加了一个文本列,其中包含汽车设备项,1,3,7,55,
的分隔ID值,并在搜索中使用了'equiment LIKE'%,55,%'查询。
然而,我们始终保持标准化数据模型与汽车和设备之间的关系
car_id equip_id
1 3
1 55
保持equipment
列和car_equipment
关系同步可以由DAL或数据库触发器处理。
请记住,除了为您的前端市场提供服务外,您可能还必须为其他目的提供报告 - 如果您的所有设备/属性数据都编码在一列中,如果没有逻辑构建您的DAL就无法查询,那么您就是捣毁。