2016-03-30 10 views
0

システムに対応するレコードを格納するテーブルがいくつかあります。たとえば、templateslogosというテーブルがあります。しかし、各テーブルでは、行の1つがシステムのデフォルトになります。私は通常、テーブルごとにis_defaultカラムを追加していましたが、1以外のすべてのローは0でした。MySQL - システムのデフォルト値を格納

私の別の同僚は、system_defaultsテーブルがある別のルートを見ています。その表には各表の列があります。たとえば、この表はtemplate_id列とlogo_id列を持ちます。その列に対応するデフォルト値が格納されます。

もう一方の一般的な方法よりも正しい方法はありますか?最初の方法は、1を除いて同じ値を持つ多くの列があります。そして、2番目は、詳細を取得するために結合を行わなければならないと仮定し、既定の新しいテーブルを追加するたびに、 。

+0

各アプローチごとにいくつかのサンプル行とともに 'SHOW CREATE TABLE'を提供します。また、データを取得する 'SELECTs'についても教えてください。 –

答えて

1

ソリューションは主に、各テーブルに複数のデフォルト値が割り当てられていないことを確認する方法が異なります。

  • is_defaultソリューション:ここでは、それ、これは制約によって除外することができるかどうか、データベースのSQL方言に依存します。1.テーブルの複数のレコードが値を持っていることが起こり得ます。 MySQLを理解する限り、この種の制約はそこでは表現できません。

  • 個別のテーブルソリューション:ここでは、テーブルごとにデフォルトで1つのテーブルが存在することを簡単に確認できます。 not nullの制約を割り当てることによって、特定のテーブルのデフォルトを強制することもできます。新しいテーブルを導入すると、データベースとそれに対応するソフトウェアが拡張されているので、defaultテーブルの追加属性は損なわれません。

真ん中のコースは、次のようになります。テーブル名で識別されるテーブルごとに一つのレコードとテーブル

Defaults 
id 
table_name 
row_id 

を持っています。技術的には、テーブルごとに複数のデフォルトの問題が発生することもあります。しかし、新しいテーブルが導入されたときにのみこのテーブルにレコードを挿入すると、操作中のソフトウェアはこのテーブルの更新を実行する必要があり、挿入することはありません。コード検査で簡単に確認できます。

+0

恐ろしい、説明のおかげで。 – kenshin9