Joe*_*eid 1 database-design best-practices datatypes
[背景故事] 我有一个关于我们当前小部件库存的简单数据库。它在五六个表中平均只有十几列,但已经有大量的记录。
有些 Widget 带有大写,有些没有,但实际上我们以前从未跟踪过。现在管理层希望用户能够跟踪每个单独的 Widget 是否带有上限。我们不会做盘点来检查我们当前的库存,但是当我为“到达上限”添加新列时,将没有关于今天之前收到的所有数据的数据。处理此类场景的常用最佳实践方法是什么?
添加字符串列时,“”的含义很明显;没有输入数据。但是我添加了一个布尔值,因此现有记录将默认为一个确实表明某些内容的值:FALSE。
我的第一个想法是让用户门户为这个问题设置一个单选按钮对,而不是一个复选框。在创建新记录时,或者甚至返回带有假假的旧记录时,如果他们单击是或否,则记录该值,再加上另一个布尔值表示该问题实际上是手动回答的。那是; 如果第一个布尔值是 F,但第二个布尔值是 T,则第一个布尔值不是“默认假”。
他们挥手的解决方案是将今天之前的记录显示为“未知”(这已被取消,因为现有记录无法手动获得用户验证的 false 值)。我应该使用 faux-bool int 并在三进制中考虑它吗?或者,回到使用单独的跟踪位/布尔值,我应该为这种数据创建一个新表吗?这是一个普遍的概念吗?有什么命名约定吗?
在大多数 DBMS 中,或者至少在我处理过的那些 DBMS 中,Bool 实际上是一个三元组。你有 1、0 和 NULL。NULL 专门用于“我还没有输入任何数据”。根据您的编码方式,您的复选框应默认为未选中 0 或 NULL。然后1当然是检查。但是,在您的报告中,您实际上可以区分有人查看并输入值(1 或 0)的行和尚未更新的行(值为 NULL 的行)。