これが怖いの自分だけ?というものありますか?

首記の件可能でしょうか?
可能であればSQL文等ご教示いただければ幸いです。

下記のようなテーブルを作成したいと考えています。

*訪問日だけを配列にしたい。訪問日は入力されどんどん増えていく。訪問日は年月日まで表示したい。

主キー;顧客番号
     訪問日 [ ]

よろしくお願いいたします。

A 回答 (3件)

配列でもインデックスを使って検索できます。



CREATE TABLE
test=> CREATE TABLE t (c int[]);
CREATE TABLE
test=> INSERT INTO t SELECT ARRAY[n] FROM generate_series(1, 100000) AS n;
INSERT 0 100000
test=> EXPLAIN SELECT * FROM t WHERE c @> ARRAY[1];
QUERY PLAN
-------------------------------------------------------
Seq Scan on t (cost=0.00..1986.00 rows=100 width=25)
Filter: (c @> '{1}'::integer[])
(2 行)
test=> CREATE INDEX t_c_idx ON t USING gin (c);
CREATE INDEX
test=> ANALYZE t;
ANALYZE
test=> EXPLAIN SELECT * FROM t WHERE c @> ARRAY[1];
QUERY PLAN
------------------------------------------------------------------------
Bitmap Heap Scan on t (cost=5.05..281.52 rows=100 width=25)
Recheck Cond: (c @> '{1}'::integer[])
-> Bitmap Index Scan on t_c_idx (cost=0.00..5.03 rows=100 width=0)
Index Cond: (c @> '{1}'::integer[])
(4 行)
    • good
    • 0

> どのようなマイナス面があるのかご教示いただけないでしょうか。


参照リンク先にもありますが、クライアント側ではこの機能を
ほとんどサポートしていません。
また配列項目にはINDEX作成できないみたいなので、検索が遅く
なる可能性が大きいです。

> 「(顧客番号+訪問日)を主キーして」という点は顧客番号、訪問日の両方を主キーにするという意味でしょうか?
(顧客番号、訪問日)の複合キーで主キーにするという意味です。
create table 顧客訪問
(
顧客番号 int,
訪問日 date,
primary key (顧客番号,訪問日)
);

のようにすれば作成できます。
    • good
    • 0

create table テーブル


(
顧客番号 int primary key,
訪問日 date[]
);

insert into テーブル values ( 1, array[ cast('2010-1-1' as date), cast('2010-5-1' as date), cast('2010-11-1' as date) ]);
insert into テーブル values ( 2, array[ cast('2011-1-1' as date), cast('2011-3-1' as date), cast('2011-6-1' as date) ] );
update テーブル
set 訪問日 = ARRAY_APPEND( 訪問日, cast( '2010-9-1' as date ) )
where 顧客番号=1;

update テーブル
set 訪問日 = ARRAY_APPEND( 訪問日, cast( '2010-7-1' as date ) )
where 顧客番号=1;

https://202.32.10.37/PostgreSQL/Manual/document/ …
https://202.32.10.37/PostgreSQL/Manual/document/ …

出来ますけれど、失うものの方が大きいと思います。
なぜ、
顧客番号
訪問日
で(顧客番号+訪問日)を主キーして、訪問日にINDEXを貼るのではダメですか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。下記の点重ねてご教示願えないでしょうか。

<出来ますけれど、失うものの方が大きいと思います。

どのようなマイナス面があるのかご教示いただけないでしょうか。

<顧客番号
訪問日
で(顧客番号+訪問日)を主キーして、訪問日にINDEXを貼るのではダメですか?

「(顧客番号+訪問日)を主キーして」という点は顧客番号、訪問日の両方を主キーにするという意味でしょうか?

よろしくお願いいたします。

お礼日時:2011/05/06 14:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す


おすすめ情報