sql - has_table 键的日期期间

标签 sql database postgresql postgresql-9.1

我有这个模式

-- Create tables section -----------------------------------------

-- Table t1
CREATE TABLE "t1"(
"id" Serial NOT NULL,
PRIMARY KEY ("id");

-- Table t2
CREATE TABLE "t2"(
"id" Serial NOT NULL,
PRIMARY KEY ("id");

-- Table t1_has_t2
CREATE TABLE "t1_has_t2"(
"t1_id" Integer NOT NULL,
"t2_id" Integer NOT NULL,
"d_start" Date,
"d_end" Date,
PRIMARY KEY ("t1_id","t2_id"),
FOREIGN KEY ("t1_id") REFERENCES "t1" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY ("t2_id") REFERENCES "t2" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION);

我需要使用表“t1_has_t2”来保存 t1 或 t2 时间段。例如,我想将这条记录保存在表“t1_has_t2”中:

+-------+-------+------------+------------+
| t1_id | t2_id | d_start    | d_end      |
+-------+-------+------------+------------+
| 1     | 1     | 01-01-2016 | 31-01-2016 |
+-------+-------+------------+------------+
| 1     | 1     | 01-02-2016 | 31-12-9999 |
+-------+-------+------------+------------+

如果日期周期不同,我不知道如何对我的数据库添加具有相同 ID 的另一条记录。

最佳答案

问题是表t1_has_t2中的主键只包括t1_idt2_id。您还应该在主键中包括剩余的两个列以使其工作。

顺便说一句,像你这样使用两个日期时,最好使用daterange。列,因为这样您就可以使用 EXCLUDE constraint 轻松检查重叠与 && operator .

关于sql - has_table 键的日期期间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38923829/

相关文章:

java - 找到最近的邻居/经纬度

database - 我想通过在 mongodb 中按日期过滤来搜索

sql - 根据另一列中的文本更新数据库中的列?

postgresql - 更新模型对象时,如何将整数列设置为null?

ruby-on-rails - Rails uniq 公共(public)事件

ruby-on-rails - ActiveRecord:清理 `select` 或 `order` 调用中的动态值

MySQL - 如何使用地理位置数据加快搜索速度?

sql - PostgreSQL 中是否有类似 zip() 函数的东西组合了两个数组?

Mysql sum 查询在使用多个连接时返回不正确的结果

c# - 在 GridView 中缩放图像