2017-03-14 5 views
1

dog_idは、主キーとが一意であるOWNER_IDある場合は、私はテーブルの犬リレーショナルデータベース(特定のケース)でリソースを共有するにはどうすればよいですか?

mysql> select * from dogs; 
+----------+-------------+----------+ 
| dog_id | tail_length | owner_id | 
+----------+-------------+----------+ 
| dog-id-1 | 1 cm  | owner-1 | 
| dog-id-2 | 2 cm  | owner-2 | 
| dog-id-3 | 3 cm  | owner-3 | 
+----------+-------------+----------+ 

を持っていると言います。 今、私は犬の共有が可能であることを願っています。テーブルができるように。 が主キーであるdog_idとは、テーブル内で一意であるOWNER_IDとして

+----------+-------------+----------+ 
    | dog_id | tail_length | owner_id | 
    +----------+-------------+----------+ 
    | dog-id-1 | 1 cm  | owner-1 | 
    | dog-id-2 | 2 cm  | owner-2 | 
    | dog-id-3 | 3 cm  | owner-3 | 
    | dog-id-3 | 3 cm  | owner-1 | 
    | dog-id-3 | 3 cm  | owner-1 | 
    +----------+-------------+----------+ 

は、しかし、それは不可能です。犬は10000人以上のユーザーと共有することができます。

下位互換性の制約のため、元のテーブルの主キー制約と一意キー制約を削除することはできません。このためにはmysqlを使用する必要があります。共有を達成するための最良の戦略は何でしょうか?

追加の制約:私はdog_idを介してのみ照会でき、owner_idは照会できません。

+0

になるのですがなぜ古いテーブルも関係していますか? 「dog_idを介してのみ照会でき、owner_idではない」とはどういう意味ですか?犬とオーナーに(dog_id、owner_id)ユニーク&FKを持つdog_id&owner_idの表の明白な解決法には問題がありますか? – philipxy

+0

* "私はdog_idだけで、owner_idでは照会できません" * 通常、ユーザーからの入力としてdog_idが取得されるため、テーブルからdog属性と所有者IDを取得します。 dog_idには主キーがあり、owner_idには一意のキーがあります。私は本当にそれを変更することはできません。 Bill Karwinが指摘しているように、これは古典的な多対多の関係であり、接合テーブルを使用して解決されます。おそらくそれを使用しています。 – user3184974

+0

'owner_id'の一意性制約を取り除けない場合、このテーブルを使用することはできません。期間。フルストップ。 –

答えて

1

あなたが持っているものは、多対多の関係です。

  • 犬は、個々の所有者がこれは、リレーショナルデータベースの設計における共通の問題である多くの犬

を所有することができます多くの所有者

  • を持つことができます。多対1の関係に必要なのは、別のテーブルを定義することです。

    +----------+----------+ 
    | dog_id | owner_id | 
    +----------+----------+ 
    | dog-id-1 | owner-1 | 
    | dog-id-2 | owner-2 | 
    | dog-id-3 | owner-3 | 
    | dog-id-3 | owner-1 | 
    | dog-id-3 | owner-1 | 
    +----------+----------+ 
    

    私はこれだけが関連している理由を私は理解していない

    をOWNER_ID dog_idを通じて照会し、することはできません。データ構成は約Third Normal Formであり、データのクエリ方法に関するものではありません。

    唯一の代替方法は、1つの行の1つの列に複数の所有者IDを格納することです。これは、リレーショナルデータベースの有効なデザインではありません。私の答えはIs storing a delimited list in a database column really that bad?

  • 0

    別のテーブルを作成するテーブルの所有者と外部キーを提供します。

    +0

    私はdog_idを介してのみ照会でき、owner_idでは照会できません。これを今質問に追加しました。 – user3184974

    関連する問題