我有一个问题困扰了我一年,我找不到一个直接的答案,所以我把它带给公众,希望它能得到解决,我不能永远自由。
所以实际的问题是-如果我们在选项中有预定义的值,我们应该如何在数据库中存储数据?
值是字符串还是可能?
<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>
我内心的声音是说整数是最好的选择,有什么想法吗?
从数据库设计的角度进行选择。
-
只需使用短文本字符串,在您的情况下为汽车品牌。然后,当你想填充你的选择列表时,用提取它
SELECT DISTINCT brand FROM cars ORDER BY brand;
-
创建一个引用表,可以称之为
brand
:brand_id | name 1 | Volvo 2 | Saab 3 | Mercedes 4 | Audi 5 | Fiat
然后使用该表填充您的选择列表,并将
brand_id
放在您引用品牌的cars表中。它可以是"品牌"表的外键。 -
为品牌使用
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
作为主要的情况下,您可以发送名称