日期期间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添加另一条记录,如果日期时间段是不同的。

+1

你的主要关键是什么是限制表只有一个ID对,你需要修改它以允许你问什么。 – Uueerdo

问题是表t1_has_t2中的主键只包含t1_idt2_id。您还应该在主键中包含其余两列以完成此项工作。顺便提一句,如果您使用两个日期,最好使用daterange列,因为您可以使用EXCLUDE constraint&& operator轻松检查重叠。

+0

使用daterange是完美的,但我使用PostgreSQL 9.1。在这个版本中不存在daterange数据类型。 https://www.postgresql.org/docs/9.1/static/datatype-datetime.html –