DB记录属性的整数与字符

时间:2010-12-13 20:33:27

标签: mysql database database-design data-modeling

说我有一张房地产列表表。每个商家信息都可以是“待售”或“出租”。因此,我可以将'For sale'映射为0,'For rent'映射为1并将其作为INT存储在数据库中。但是,如果我在CHAR类型的字段中将其存储为“sale”/“rent”,那将更具描述性。或者我可以在我的程序中将0和1映射到两个常量FOR_SALE和FOR_RENT。或者使用字符“S”和“R”。在数据库中存储此类属性的最佳做法是什么,条件是一个此类属性的选项总数非常小。

4 个答案:

答案 0 :(得分:2)

我将该属性作为int存储在列表中,并使其成为查找表的外键,您可以在其中添加说明。

alt text

答案 1 :(得分:1)

您应该使用char(1)或int(取决于选项的数量)并将值映射到常量字符串,这样您将节省空间,并且将来可以轻松配置字符串:)< / p>

答案 2 :(得分:0)

PostgreSQL和MySQL支持enumerated types,这听起来像你正在寻找的。枚举类型的唯一问题是数据库可移植性。例如,Oracle没有枚举类型,因此您必须使用CHAR。因此,如果你在PostgreSQL上设置,那么没有理由不利用它的功能。如果您需要数据库可移植性,使用CHAR(1)或NUMBER(1)是最有效的。

更新:您可以使用带有外键的查找表,因为其他响应已提及但布尔值不会更改,这会引入不必要的复杂性。特别是当您考虑在ORM中为它们创建其他类时。但是,如果您希望更改该列/变量的值范围,则使用查找表是最佳方法。

答案 3 :(得分:0)

我只是使用char(1)这么简单的事情;我还要对它进行CHECK约束(如果可用)以给出一些健全性检查。为只有两个值的东西添加一个额外的表是有点无意义的,即使它是垂直正确的。此外,当您在手动调试或在数据库中进行调整时,列中的SR会对您有所帮助,16会相当多无意义的。

当然,如果你有值并且不能用合理的助记符来表示它们,那么“int和fK”方法更有意义。

如果有必要,您可以很容易地从char(1)更改为“int和FK”。