データの正規化のトップ:getGenders

Habrは主にIT業界に専念しているため、次のストーリーには多くのファンがいると思います。



少し前まで、私たちのチームはWebサービスを介して外部の金融システムと統合する必要がありました。 とりわけ、getGendersという神秘的な名前のメソッドに注目が集まりました。 この方法に関する解説は、「 Sex Guide。Strange、but two two ... 」(冗談ではない)のように聞こえた。 メソッドが入力として文字列パラメーターを受け取ったという事実により、状況は悪化しました。



さまざまなパラメーター値でメソッドを呼び出そうと何度か試みた後でも、答えを得ることができました。



    id | 名前|  vid
 ----------------------
 500001 | 男性|  「1」
 500012 | 女性|  「1」


おそらく私の舌だけでなく、「本当に奇妙ですが、なぜ2つあるのでしょうか?」誰もがテーブルの下に落ちたからです。



疑わしいほど長い識別子は、多くの場合、データベースへのクエリの結果に基づいてWebサービスが生成され、いくつかのテーブルの一般的なシーケンスを使用できるという事実によって説明できます。 しかし、vIdパラメーターは私たちに休息を与えませんでした...



フィンの代表者とこの重要な問題を明確にする探求。 施設は、チームで最も深刻な人物に割り当てられました。 すべてがいシンプルであることが判明しました。vIdはシステムのバージョン番号です。



なぜ私たちはそれをそれほど明確に必要とし、説明しなかったのか、乾いた「移行のための何か」に限定しました。 しかし、少なくとも遠い将来、データベース設計者と話をすることをあきらめません。バージョンを考慮に入れて、性別の参照を提示するために少なくとも2つのテーブルを使用したことは間違いないので...



誰かが興味がない場合は、インターフェイスコード(匿名化)を以下に示します。



 / **
   *性別のディレクトリ(性別)。 奇妙ですが、そのうちの2つがあります...
   *                        
   * @param vId
   * @return java.util.List <api.dictionary.soap.Genders>
   * /
 @WebMethod(action = "ns:getGenders")
 @WebResult(名前= "genders"、targetNamespace = "...")
 @RequestWrapper(localName = "getGenders"、targetNamespace = "..."、className = "api.dictionary.soap.GetGenders")
 @ResponseWrapper(localName = "gendersList"、targetNamespace = "..."、className = "api.dictionary.soap.GendersList")
 public List <Genders> getGenders(@WebParam(name = "vId"、targetNamespace = "...")String vId);


コメントに書いてください、そしてあなたがあなたの仕事で出会ったどんな興味深く、神秘的でしたか。



All Articles