web-dev-qa-db-ja.com

すべてのデータが主キーに依存している場合、テーブルを異なるテーブルに分割する必要がありますか?

私の割り当てでは、ライセンスアプリケーション用のデータベースを作成する必要があります。私は12列あり、1列はライセンスキー用です。他のすべての列は、ライセンスキーに関連するデータです。ライセンスキーは常に異なります。冗長なデータを削除するには、テーブルをより多くのテーブルに分割する方がよいと言われています。表は次のとおりです。

license_code
product_amount
product_limit
商品名
開始日
終了日
first_registration_date
most_recent_check_date
registration_end_date
hardware_id
IP
状態

現在、私はそれをこれに分割しています:

表:ライセンス

license_code *
製品番号*
開始日
終了日
first_registration_date
most_recent_check_date
registration_end_date
product_amount
product_limit
hardware_id
IP
状態

表:製品

製品番号*
商品名

とにかくすべてのデータがlicense_code列に依存しているので、分割する必要はないと本当に思っています。誰かが私を助けることができますか?ありがとう。

編集:使用方法の説明

ライセンスキー/コードは基本的に一意の文字列です。製品(ソフトウェアプログラム)を使用するには、ライセンスキーを使用する必要があります。製品は複数のライセンスキーでアクティブ化でき、個人1はコードXを使用して製品Yをアクティブ化でき、個人2はコードZを使用して製品Yをアクティブ化できます。したがって、ライセンスキーは製品の複数のインスタンスをアクティブ化できますが、使用できるのは次の場合のみです。単一の製品。

この説明がより明確になることを願っています。

2
Denny

ライセンスの正確な目的や使用方法など、少し情報が不足していると思います。たとえば、すべての製品に1つのライセンスがありますか?ライセンスに複数の製品を含めることはできますか?ライセンスという用語が使われているので、私は、各個人が製品を使用するための独自のライセンスを持っていると想像します(したがって、1対多の関係)。そのシナリオでは、ライセンスは1つの製品に対してのみ有効であり、複数のライセンスが1つの製品を参照できると想定します(1対多の関係)。

したがって、その要件を満たすには、2つのテーブルが必要になります。 1つは製品用、もう1つはライセンス用です。 productテーブルには、次のようなすべての製品情報が含まれます。

Products
-----------
ProductID
Name,
Description,
Price,
(etc)

Licenses
--------
LicenseID,
ProductID,
StartDate,
EndDate,
Amount, -- I believe this is to represent how many individual licenses of this one is used
Limit,  -- And this is to represent how many people can use this current license
(etc)

これにより、いくつかのメリットがあります。これで、個々の製品を複数の人にライセンスアウトでき(ここでも、製品はソフトウェアのようなものだと思います)、製品に影響を与えることなくライセンスを変更できます。製品に変更を加える必要がある場合は、すべてのライセンスを変更できます。自動的に更新されます。この良い例は、製品の説明の変更です。製品がライセンスとともに保存されている場合、同じ製品を使用していたすべてのライセンスを変更する必要があります。これは良くなく、データに一貫性がない傾向があります。

拠点を離れている場合は、遠慮なくお知らせください。ご覧のとおり、私はかなりの数の仮定をしました。

0
Eric S