存储 id 或字符串 Mysql DB



我有一个问题困扰了我一年,我找不到一个直接的答案,所以我把它带给公众,希望它能得到解决,我不能永远自由。

所以实际的问题是-如果我们在选项中有预定义的值,我们应该如何在数据库中存储数据?

值是字符串还是可能?

<select name="cars" id="cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select> 

值作为起始值?

<select name="cars" id="cars">
<option value="1">Volvo</option>
<option value="2">Saab</option>
<option value="3">Mercedes</option>
<option value="4">Audi</option>
</select>

我内心的声音是说整数是最好的选择,有什么想法吗?

从数据库设计的角度进行选择。

  1. 只需使用短文本字符串,在您的情况下为汽车品牌。然后,当你想填充你的选择列表时,用提取它

    SELECT DISTINCT brand FROM cars ORDER BY brand;
    
  2. 创建一个引用表,可以称之为brand:

    brand_id   |  name
    1          |  Volvo
    2          |  Saab
    3          |  Mercedes
    4          |  Audi
    5          |  Fiat
    

    然后使用该表填充您的选择列表,并将brand_id放在您引用品牌的cars表中。它可以是"品牌"表的外键。

  3. 为品牌使用ENUM,在表中定义其行,如下所示:

    brand ENUM('Volvo', 'Saab', 'Mercedes', 'Audi', 'Fiat')
    

选择2可能是最好的:将新品牌添加到选择列表中变得微不足道:只需在brand表中插入一行即可。它";控制词汇";也就是说,它不允许您的cars表包含拼写错误或其他垃圾。而且,对于cars表来说,它具有节省空间和索引友好的特点。

选择1也可以,但它缺少选择2的优点。

选择3不太好:一方面,在你的系统中添加一个新品牌相当昂贵;你已经改变了你的桌子。另一方面,检索品牌的可能价值以放入您的选择列表比其他两个选项更难。

除非引用表(brand(中有一千多行,否则这些选项对性能的影响将是最小的。即使这样,适当的索引也可以从中获得非常好的性能。SQL就是为这类工作而设计的。

这取决于您的结构。

如果cartype是另一个表中的列,则只保存id,并在第二个表中保存cartypeid和cartype。

使用第二个表,您可以填写Form,并且只有在需要名称时才加入cartype表。

例如,在cartype是UNIQUE作为主要的情况下,您可以发送名称

最新更新