Mysql 数据库方案设计查询

Mysql 数据库方案设计查询,mysql,database-design,Mysql,Database Design,我正在设计一个数据库,将用于一个网站用于交换汽车 汽车具有不同的属性和姿态类型,如 “多媒体”、“安全”等类型的属性 例如防抱死制动系统,气囊,尤其是其它 我想以1和0组合的形式将所有这些属性保存在一个cloumn中 像 1001000101 但我的问题是,如果我更改属性名在数据库中的位置,那么这个组合“1001000101”将如何更新?或者哪种方法应该是最好的方法。将所有标志放在一个列中,会比将它们作为单独的布尔属性的可维护性带来什么好处 如果您的标志集相当稳定,我建议您至少从将它们建模为单个

我正在设计一个数据库,将用于一个网站用于交换汽车

汽车具有不同的属性和姿态类型,如

“多媒体”、“安全”等类型的属性 例如防抱死制动系统,气囊,尤其是其它

我想以1和0组合的形式将所有这些属性保存在一个cloumn中

1001000101


但我的问题是,如果我更改属性名在数据库中的位置,那么这个组合“1001000101”将如何更新?或者哪种方法应该是最好的方法。

将所有标志放在一个列中,会比将它们作为单独的布尔属性的可维护性带来什么好处


如果您的标志集相当稳定,我建议您至少从将它们建模为单个布尔列开始,这将更易于管理。如果可以提供一些其他可测量的好处,那么以后管理它们会变得更复杂。

如果您想这样做,并将属性保存在一个数据字段中,更改关系“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;
    
    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替换为7,则可能会出现如下情况:

    UPDATE yourtable SET backupfield = yourfield;
    
    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
    

    是否有任何原因需要这样做?如果没有具体原因,请使用单独的字段(更简单)。

    除非您不必处理严重的性能问题,否则不应取消数据库的规范化

    几年前,我在一个主要的二手车市场工作,我们添加了一个文本列,其中包含汽车设备项目的分隔id值
    、1,3,7,55、
    ,以及在搜索查询中使用的“%”、55、%”等设备

    然而,我们总是保持我们的标准化数据模型与汽车和设备之间的关系

    car_id    equip_id
    1         3
    1         55
    
    保持
    设备
    列和
    车载设备
    关系同步可以由DAL或数据库触发器处理


    请始终记住,除了为前端市场提供服务外,您可能还需要为其他目的提供报告-如果您的所有设备/属性数据都编码在一列中,如果没有DAL构建的逻辑就无法查询,那么您就完蛋了。

    MySQL是一项要求吗?我认为,现代NoSQL数据库可以在这方面提供帮助。例如,MongoDBe、 为什么不使用多个列?有没有这样做的原因?@Martin Woe将这些建模属性转换为列!为将来添加的每个属性更改数据模型甚至比反规范化还要糟糕。