2017-01-27 4 views
0

職場では、不動産業者が新しい開発状況を提出できるようにフォームを作成しています。フォームの簡略化されたバージョンは次のとおりです。同じデータを保存する2つの方法

Bedrooms: [Enter a number] 
Quantity: [Enter a number] 

Add Another | Save 

エージェントは複数の行を追加できます。

| development_id | bedrooms | quantity | 
|----------------|----------|----------| 
| 1    | 3  | 1  | 
| 1    | 3  | 1  | 
| 1    | 3  | 3  | 

は明らかに行がユニットまたはその両方を表すことができ:しかし現時点では、我々は、私の意見では、当社のデータベースは方法で同一のデータを保存することができます重複のために絶対にゼロ検証を、持っていますグループのユニット。

私は開発を別ののどちらか一方の方法で保存すべきだと主張していますが、確かにその両方ではありません。残念ながら、バックエンドの開発者—私は主にフロントエンドです—は大きな問題ではないと主張しています。簡単な例

は、上記のように、それを格納することで、3つのベッドルームを持って販売されているどのように多くの開発取得するCOUNTquantityフィールドのSELECT COUNT(*)配慮が必要です。

フロントエンドの開発者は、プレゼンテーションロジックであるように思えます。プレゼンテーションロジックは、単一ユニットのリストとしてレンダリングするか、グループ化するかフロントエンド/ APIタスクである必要があります。一方通行か他方通行か。最終的に私たちのテーブルは正規化されていないようです。

私の謙虚な意見では、development_id, bedroomsにユニークなインデックスがあるはずです。

私の主張は正しいですか?またはひどく間違っていますか?

編集:明確に

これらのすべての同じ事実を表すすべてが、現在可能であり、そして私の議論だけ方法があるはずです。

| development_id | bedrooms | quantity | 
|----------------|----------|----------| 
| 1    | 3  | 1  | 
| 1    | 3  | 1  | 
| 1    | 3  | 1  | 

同じ以下のように:

| development_id | bedrooms | quantity | 
|----------------|----------|----------| 
| 1    | 3  | 1  | 
| 1    | 3  | 2  | 
と同じ

| development_id | bedrooms | quantity | 
|----------------|----------|----------| 
| 1    | 3  | 3  | 
+0

あなたはそうです。データベース内の各事実を記録する方法は1つだけあり、重複する行は許されません。私はあなたのユニークなインデックスについて確信していません。 development_idとは何ですか?また、同じ値を持つ複数の行がある場合はどういう意味ですか? – reaanb

+0

さて、私たちもプライマリ 'id'を持っています。だから、' id(pk)| development_id(fk)| |位相|フロア_エリア|価格| 'development_id、bedrooms、phase、floor_area、price'には一意の制約があります。 – Wildhoney

+0

"明らかに行は、1つのユニットまたはユニットのグループの両方を表すことができます。私には分かりませんが、分かりません。また、 "2つの方法"。 – philipxy

答えて

1

あなたは正しいですが、データベースに各ファクトを記録する方法は1つだけあり、重複する行は許可しないでください。各列が特定の開発で一定数の寝室を持つユニットの数量を表している場合は、development_id, bedroomsのユニークなキーが意味を持ち、各開発で同じ種類のユニットの複数の入力を防止します。

0

おかげで、あなたは&バックエンドの同僚/ライバルの両方が正しいです。

現実的には(現状では)大したことではありません。 実際にはDBの正規化に違反しています(この状況では)。

あなたが明らかにしたところから、複数の行に分割する必要はありません。 想像しても、別の3つのベッドを別のものから区別する別の属性が得られます。言ってやるがいい。または何らかの理由でタイムスタンプ。 それはすぐに意味を持ち始めます。

もう1つのことはここにあります:読み取りは一般的に非ブロックであり、書き込みはありません。 これは、行レベルのロックを持つ成熟したRDBMSでは、カウンタの更新が行われる一方、挿入(およびCOUNTの読み取り)は競合しないことを意味します。

あなたのリアルタイツエージェントを組み合わせることで、1桁のTPSも追加されるとは思っていませんでしたので、スケールの問題は存在しないと考えるかもしれません。 :-)

関連する問題