gpt4 book ai didi

database - 保证为空字段是否表明数据库设计不佳?

转载 作者:搜寻专家 更新时间:2023-10-30 20:27:20 25 4
gpt4 key购买 nike

我正在开发一个批处理应用程序,允许用户提交有关特定车辆信息的请求。用户可以使用 VIN 或车牌/州组合提交请求。我提出了如下表结构:


待处理车辆

vehicle_id(fk)|user_id(fk)|status|start_time

车辆

vehicle_id|VIN|plate|state


我的同事认为这是糟糕的设计,因为 Vehicles 中的每条记录要么有一个空的 VIN 字段,要么有一个空的车牌和状态字段。相反,他们提出了以下建议:
待处理车辆

vehicle_id(fk)|user_id(fk)|status|start_time

车辆

vehicle_id(pk)|字段|值

Vehicles 中的一个条目要么由一行 vin 组成:

1|"vin"|"123

或一个板 block /状态的两行:

2|“盘子”|“abc 123”
2|“州”|“纽约州”


我认为第一个解决方案更容易查询,而且没有任何明显的缺点。应该首选哪种设计?保证为空的字段真的是糟糕设计的指标吗?

最佳答案

您的同事提出的是数据库设计中的终极反模式。

在 Google 上搜索 Bill Karwin 的“反模式”一书和“EAV”。

询问您的同事,他建议如何强制“车牌”和“州”值始终成对出现在他的数据库中。如果他指向应用程序代码,请问他如何建议强制执行数据库只能通过他的应用程序进行更新。

您的解决方案比他的解决方案好一千倍。仍然“更好”(从涉及避免所有空值的关系纯度的角度来看)是为每种类型的请求提供自己的表:

VehicleQueriesByVIN

user_id(fk)|status|start_time|VIN

VehicleQueriesByPlate

user_id(fk)|status|start_time|plate|state

如果要保留每个查询随时间推移的状态的历史跟踪,则必须在其自己的表中挑出这些内容。

关于database - 保证为空字段是否表明数据库设计不佳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25559607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com