0

たとえば、連結するフィールドのリストがあります:field1 + ';' + フィールド 2。これらの連結を保存する方法に関する私の解決策は次のとおりです(v1):

FieldID | Position  | Prefix  | ConcatenationID

15      |0          |NULL     | 30

28      |1          |;        | 30

しかし、このソリューションはそれほどエレガントではないと思います。このテーブル(V2)に置き換えることを考えています:

FieldID | Position  | Separator       | ConcatenationID     | IsSeparator

15      |0          |NULL             |30                   | False

NULL    |1          |;                |30                   | True

28      |2          |NULL             |30                   | False

-V1 には、1 つのオブジェクト (フィールド) のみを格納できるという利点がありますが、区切り記号を明確に表すことができません。

-V2 には、セパレーターを明確な方法で表すという利点がありますが、複数のオブジェクト (フィールドと文字/文字列) を格納します。また:私はNULL列が嫌いです。

両方のバージョンについてどう思いますか?

最終的な回答をお寄せいただきありがとうございます。

4

1 に答える 1

0
Value|Position (CPK) |ConcatenationID (CPK)
15   |0              |30
;    |1              |30
28   |2              |30
;    |3              |30
15   |0              |40
;    |1              |40
4    |2              |40
;    |3              |40

あなたのビジネス状況におけるフィールドとセパレーターの概略的な意味が何であるかはわかりませんが、私は単に次のように導き出しました.

select value
from table
where concatenationId = 30 
order by position;

ただし、フィールドとセパレーターを区別する必要がある場合。

Value|TypeId|Position (CPK)|ConcatenationID (CPK)
15   |0     |0             |30
;    |1     |1             |30
28   |0     |2             |30
;    |1     |3             |30
15   |0     |0             |40
;    |1     |1             |40
4    |0     |2             |40
;    |1     |3             |40

タイプ テーブル:

TypeId|Type
0     |Field
1     |Separator

SQL:

select value, type
from table
left join type
using (typeId)
where concatenationId = 30 
order by position;
于 2012-10-28T15:06:39.620 に答える