0

リレーショナル正規化の原則に違反していても、1 つの変数またはデータベース フィールドに複数の値が必要な場合があります。リストをサポートする Python やその他の言語では、これは簡単です。他の人ではそうではありません。単一の属性に複数の値を挿入するを参照してください

一般的な手法の 1 つは、値をカンマ区切りの文字列 ("1,2,3" または "English,French,Spanish") に連結し、解析によって値を抽出することです。

有効な値が列挙リストから取得された場合、解析を必要としない別の方法はありますか?

4

2 に答える 2

1

はい。素数を使用し、それらを掛け合わせてから因数分解します。

  1. 使用するフィールド タイプは整数または長整数です

  2. 素数のコード値を使用する
    • 3 == 英語
    • 5 == フランス語
    • 7 == スペイン語
    • 11 == イタリア語

  3. 該当するすべての製品を現場に保管してください。
    • 21 == 英語とスペイン語
    • 385 == フランス語、スペイン語、イタリア語

  4. モジュロ関数を使用して、フィールドにある値を特定します

    if ( field % 3 == 0 ) {  english() ;}
    if ! (field % 5) { french() ;}
    =IF(NOT(MOD(A203,5)),"French","")
    


  5. 同じ値が複数回表示される可能性があります
    • 9 == 英語、英語

私は最初にこの手法を使用して次元を格納しました。

  • 3 == 時間
  • 5 == 長さ
  • 7 == 質量
  • 11 == チャージ
  • 13 == 温度
  • 17 == モル

たとえば、「最初の瞬間」のレバー アームの寸法値は 35 == 質量 * 長さになります。小数次元を整数で格納するために、小数次元にそれらすべての積を掛けて、処理で処理しました。

  • 255255 == 3*5*7*11*13*17
  • 力 == 質量 * 長さ / (秒^2)
  • 力 == (7 * 5 / (3 * 3)) * 255255 * 255255
  • 力 == 253381002875

整数を使用した理由は、丸め誤差による無効な等価比較を避けるためです。

分数次元を抽出するコードを要求しないでください。これはすべて、APL/360 で 40 年前のことです。

于 2013-03-05T20:43:02.590 に答える
0

同じ値の倍数を許可する必要がない場合は、ビット マップを使用できます。最大 8、16、32、64、または 128 の値が許可されているかどうかに応じて、1、2、4、8、または 16 バイトの整数に収まる可能性があります。

于 2013-03-05T20:59:44.280 に答える