0

私はこれらのテーブルを持っています:

* gasm_clients
id_client INT NOT NULL,
name_client VARCHAR(50) NOT NULL,
cellphone_client VARCHAR(15) NOT NULL

* gasm_invoices
id_invoice INT NOT NULL,
(id_client || client_name) --> I'm not sure of these two columns which use
invoice_total DECIMAL(10,2) NOT NULL
....

クライアントは最初に別のフォームに登録する必要があることを明確にする必要がありますが、迅速な請求書を作成するには、クライアントの名前だけが必要であり、クライアント テーブルに登録する必要はありません。

ユーザーがすべての登録済みクライアントを検索できるようにするか、クライアント名を 1 つだけ書き込みます。

EX: 
1. Choose Client
2. Write name

しかし、SQLでこれを行う最良の方法は何なのかわかりません。

4

2 に答える 2

1

データベースを設計するときは、データの重複を最小限に抑えたいと考えています。最初のオプション (id_client) は、私が使用するものです。

于 2012-11-25T00:55:33.113 に答える
1

重複を最小限に抑え、データの整合性を維持するために、hd1 の方法は正しいです。

GASM_CLIENTSGASM_INVOICESテーブルの間に主キーと外部キーの関係が存在する必要があります。GASM_INVOICESそれぞれの DBMS でテーブルを作成するときに、この関係を指定できます。この関係を指定すると、テーブルGASM_INVOICES.id_client内の有効な行への参照が列に含まれるようになりGASM_CLIENTSます。

次に、毎回顧客を登録する必要はありません。これは簡単に解決できます。id_client自動生成された整数の主キーをname_client保持し、列の制約not nullを削除します。この列には、この制約は必要ありません。データのオーバーヘッドと混乱が増えるだけです。not nullcellphone_client

また、絶対に必要でない限り、主キー (ID) 以外の列を使用して、あるテーブルから別のテーブルを参照することはお勧めできません。

このスキーマを使用すると、オペレーターがクライアントの名前を入力すると、ソフトウェアがgasm_clientsテーブル内でそれを検索し、選択する検索結果をオペレーターに表示するフロントエンド ロジックを設計できます。それ以外の場合、オペレーターは、データベースに追加される新しいクライアントとしてこの新しい名前を追加することを選択できます。

実際のINSERT INTOクエリは、この回答でここに書くには多すぎます。ここで述べた変更を行い、Korth のようなデータベース設計に関する優れた本をいくつか読んでください。そうすれば、アイデアが得られます。

私の答えが十分に役立つことを願っています。

于 2012-11-25T02:17:57.157 に答える