-1

まず、状況を説明します。よくお読みください。

Java電話帳ソフトウェアを作成しています。Name、address、mobile1、mobile2、landPh1、landPh2 などのフィールドを持つデータベースを作成しました。90% 完了した後、機能を拡張することにしました。その結果、私は VCard の使用を開始しました。現在、そのプログラムは VCard を読み取って DB に追加できます。次に、データベースに保存されているデータを使用して VCard を作成することにしました。ここで、問題発生!!

私のソフトウェアにあるように、VCard には「名前」というフィールドがありません。その代わりに、「名」、「姓」、「ミドルネーム」があります。私のソフトウェアにもあるように、VCard には「アドレス」がありません。「国」、「都市」、「番地」があります。さて、どうすればこれらの個別の詳細を取得できますか???? 取得できるのは名前だけで、姓名などは取得できません。取得できるのは住所のみで、国や市区町村などは取得できません。以下は私の提案です

  1. 完全な名前を取得します。VCard の「名」フィールドに設定します。そこに完全な名前があります。住所については、完全な住所を VCard の「Street Address」フィールドに追加します。

  2. データベースを編集して変更し、欠落しているフィールドを追加します。しかし、その後、DBは次のようになります

firstName、住所、mobile1、mobile2、landPh1、landPh2、middleName、lastName、country、city

かなり面倒ですね。

現在のフォーマットに基づいて多くのものが作成されているため、テーブルを削除できません!! 変えると結構時間かかります!!

上記の提案が優れたソフトウェア エンジニアリングの概念で問題ないかどうかはわかりません。良い方法があれば、それも教えていただけると幸いです。助けてください!!

4

2 に答える 2

2

元のデータベース設計で多くの間違いを犯しました。設計上の欠陥があるシステムを長く維持するほど、後で修正するのが難しくなるため、これらの間違いはできるだけ早く修正する必要があります。

つまり、次のことを行う必要があります。

  1. 各列に1つだけの情報が含まれていることを確認してください。これは、名前の部分に別々の列、住所の部分に別々の列などを意味します。

  2. 同じアイテムの複数のインスタンスを1つのレコードに保存していないことを確認する必要があります。これは、電話番号用に別のテーブルを作成することを意味します。ほとんどの場合、このテーブルには3つの列、連絡先を指すID、電話番号の列、および説明が含まれます。

可能なアドレスと名前を100%正確に「デコード」することはできません。

グーグルを使用すると、優れたデータベース設計のルールについて詳しく読むことができますdatabase normalization

テーブル内の列の順序やテーブル内のレコードについて心配する必要はありません。SQLにはデフォルトの順序付けの概念が含まれていません。代わりに、取得時に必要に応じて列とレコードを順序付けます。

于 2012-09-02T19:36:23.093 に答える
1

FWIW、私は:

  • データベース内の列の物理的な順序についてはあまり気にしないでください。新しい列は通常、テーブルを再作成せずに本番データベースの最後に追加されます。
    • データを正規化してください。つまり、名前と住所のすべてのフィールドを1つの列にまとめないでください。後でこれらを分割するのは、面倒です。
    • 住所とvcfカードのデータを、個人/連絡先テーブルと1:Nの別々のテーブルに正規化することを検討してください。これにより、1人あたり複数のvcardとアドレスが可能になります。
于 2012-09-02T18:10:10.593 に答える