我目前正与我的开发团队讨论一个问题.他们认为空地是坏消息.例如,如果我们有一个客户详细信息表来存储来自不同国家/地区的客户的数据,并且每个国家/地区的地址配置略有不同 - 加上1-2个额外字段,例如法国客户详细信息也可能存储条目代码和楼层的详细信息/ level plus title fields(madamme等).南非将有一个安全号码.等等.
鉴于我们正在谈论微小差异,我的想法是将所有字段放入表中并使用每个表单上所需的内容.
我的同事认为我们应该有一个单独的表格,提供额外的数据.例如customer_info_fr.但是这种接缝首先完全打败了组合表的目的.
争论的焦点是空字段/列是坏的 - 但我很难在数据库设计原则方面找到支持或反对这个论点和首选解决方案的理由.
另一个选项是一个单独的迷你EAV表,它存储带有parent_id,key,val字段的额外数据.或者将额外数据序列化到主customer_data表中的extra_data列中.
我觉得我很困惑,因为我正在讨论的内容并未被3NF所涵盖,而这正是我通常用作如何构建数据的参考.
所以我的问题具体: -
如果每条记录的数据略有差异(例如1-2个不同的字段),最好的方法是什么?
我不明白为什么factory_boy比直接在Django测试中创建ORM /模型实例更受欢迎.factory_boy网站几乎无法解释使用它的好处.
作为固定装置的替代品是有意义的,这些固定装置难以管理,速度慢等.
但是,为什么不只是根据测试需要创建模型实例?
如果factory_boy完全取代了对db的写入,那么很好,我认为在这种情况下它会非常有用,但工厂男孩创建的django模型实例仍然与数据库交互.
另一个潜在的好处是对序列的支持,但是在不需要工厂男孩的情况下创建序列/样本数据并不困难.
总而言之,我看到使用工厂男孩几乎没有任何好处,直接创建对象/模型实例.
我希望我错过了一些明显的东西!
无论如何,我总是试图在表上有一个整数主键.但现在我在质疑这是否总是必要的.
假设我有一个产品表,每个产品都有一个全球唯一的SKU编号 - 这将是一个8-16个字符的字符串.为什么不把它变成PK呢?通常我会使这个字段成为一个唯一的索引,但后来有一个自动递增的int字段作为PK,因为我认为它会更快,更容易维护,并允许我做一些事情,比如轻松添加最后5条记录.
但就优化而言,假设我只是匹配全文字段而接下来正在进行文本匹配查询(例如像%%),你们可以想到任何不使用基于文本的主键的原因,很可能是类型VARCHAR()?
干杯,伊曼克
mysql ×2
django ×1
factory-boy ×1
indexing ×1
optimization ×1
python ×1
testing ×1
unit-testing ×1