首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库方案设计查询

数据库方案设计查询
EN

Stack Overflow用户
提问于 2012-01-13 19:19:50
回答 4查看 69关注 0票数 0

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

汽车有不同的属性和类型,比如

“多媒体”、“安全”等类型的属性,例如ABS、Airbages、ESP等

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

喜欢

1001000101

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-13 19:24:43

将所有标志放入一个单独的列中会带来什么好处,而不是将它们作为单独的布尔值属性进行维护?

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

票数 0
EN

Stack Overflow用户

发布于 2012-01-13 19:26:26

尝试使用bit data type (请参阅storage requirements -似乎是更合理和更简单的解决方案

票数 0
EN

Stack Overflow用户

发布于 2012-01-13 19:36:50

如果您想这样做,并将属性保存在一个数据字段中,则更改位置的关系"attribute“必须导致数据的管理性更新。由于数据库不知道该关系,因此没有简单的方法来自动执行此更新。

每次发生这样的事件时,您都必须这样做。

基于这种表的理论:

代码语言:javascript
复制
CREATE TABLE `yourtable` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `yourfield` varchar(16) DEFAULT NULL,
  `backupfield` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`id`)
) 

  1. 将旧值存储在单独的字段中。

这可能看起来像这样:

代码语言:javascript
复制
UPDATE yourtable SET backupfield = yourfield;

  1. 更新该字段。

如果将位置3与7互换,则可能如下所示:

代码语言:javascript
复制
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

你有什么理由要这样做吗?如果没有具体的原因,可以使用单独的字段(方法更简单)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8849759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档