首页 > 解决方案 > 如何在数据库中存储点(x,y)?

问题描述

我需要将位置(x,y 点)存储在我的数据库中,点可以为空,X并且Y总是小于 999。目前我正在使用 EFCore Code First 和 Postgresql 数据库,但我想灵活一些这样我就可以在没有太多工作的情况下切换到 MSSql。我不打算离开 EF Core。

现在,我有两列:LocationXLocationY,两者都是int?类型。我不确定这是否是一个好的解决方案,因为从技术上讲 DB 允许 (X=2, Y=null),它应该是。它要么都是空的,要么都不是。

我的选择二是将其存储在一个字符串列中:"123x321",最大长度为 7。

有没有更好的办法?

谢谢,

标签: postgresql.net-coreentity-framework-coreef-core-3.1

解决方案


检查约束可用于强制两个列同时为 NULL 或 NOT NULL:

CREATE TABLE t(id INT,
  x INT,
  y INT,
  CHECK((x IS NULL AND y IS NULL) OR (x IS NOT NULL AND y IS NOT NULL))
);

db<>小提琴演示


推荐阅读