首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >固定大小数组数据库字段

固定大小数组数据库字段
EN

Stack Overflow用户
提问于 2008-10-23 21:55:16
回答 5查看 1.8K关注 0票数 2

我需要在数据库字段中存储几个日期值。这些值将绑定到一个“用户”,以便每个用户都有他们自己的几个日期值的唯一集合。

我可以在这里使用一对多的关系,但每个用户都会有确切的4个日期值与它们相关联,所以我觉得一对多的表可能会过分(在许多方面,例如速度),但是如果我需要对它们进行查询,我需要这4个值来处理不同的领域,比如MyDate1 MyDate2 .等等,但是SQL命令每次都要检查4个值。

因此,一对多的关系可能是最好的解决方案,但是否有更好的/更清洁的/更快的/任何其他方法?我设计得对吗?

该平台是mostly 2005,但任何平台上的解决方案都可以,我主要是在寻找合适的db设计技术。

编辑:4个字段表示相同事物的4个实例。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-10-23 21:58:49

如果您将它作为四个单独的字段来执行,那么您就不必加入。为了避免查询语法太糟糕,您可以编写:

代码语言:javascript
复制
SELECT * FROM MyTable WHERE 'DateLiteral' IN (MyDate1, MyDate2, MyDate3, MyDate4);

正如注释中提到的,in运算符在日期字段(直到最后一个(Milli)秒)时非常具体。您可以始终在子查询上使用日期时间函数,但之间不能使用:

代码语言:javascript
复制
SELECT * FROM MyTable WHERE date_trunc('hour', 'DateLiteral') 
IN (date_trunc('hour', MyDate1), date_trunc('hour', MyDate2), date_trunc('hour', MyDate3), date_trunc('hour', MyDate4));
票数 2
EN

Stack Overflow用户

发布于 2008-10-23 23:49:55

有些数据库(如火鸟 )具有数组数据类型,这与您所描述的完全相同。声明如下:

代码语言:javascript
复制
alter table t1 add MyDate[4] date;
票数 2
EN

Stack Overflow用户

发布于 2008-10-23 22:35:48

就其价值而言,规范化的设计是将日期存储为依赖表中的行。

将多个值存储在一个列中并不是一个规范化的设计;规范化显式意味着每个列都有一个值。

您可以确保以这种方式将不超过四行插入到从属表中:

代码语言:javascript
复制
 CREATE TABLE ThisManyDates (n INT PRIMARY KEY);
 INSERT INTO ThisManyDates VALUES (1), (2), (3), (4);

 CREATE TABLE UserDates (
   User_ID INT REFERENCES Users,
   n INT REFERENCES ThisManyDates,
   Date_Value DATE NOT NULL,
   PRIMARY KEY (User_ID, n)
 );

但是,此设计不允许您强制使用日期值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/231695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档