日期期间has_table关键
问题描述:
我有这个模式日期期间has_table关键
-- 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或T2周期表“t1_has_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_id
和t2_id
。您还应该在主键中包含其余两列以完成此项工作。顺便提一句,如果您使用两个日期,最好使用daterange
列,因为您可以使用EXCLUDE
constraint和&&
operator轻松检查重叠。
+0
使用daterange是完美的,但我使用PostgreSQL 9.1。在这个版本中不存在daterange数据类型。 https://www.postgresql.org/docs/9.1/static/datatype-datetime.html –
你的主要关键是什么是限制表只有一个ID对,你需要修改它以允许你问什么。 – Uueerdo