2017-06-14 9 views
-1

予約ソフトウェアを作成する必要があり、データベースの設計を開始しました。 部屋は世界のどの場所にあってもよいので、私はアドバイスをしたいと思います。 多くの類似した質問を読んでいる私はこのスキーマを設計しましたが、どう思いますか?すべてのタイプのアドレスを格納すれば十分ですか?
私はthisの構造に従った。建物の部屋のデータベーススキーム

enter image description here

+0

なぜ 'FloatNumber'は' Building'の一部ですか?そして、LAT/LONGでは、FLOATの固有の不正確さに関する問題を避けるために、DECIMALを使用したいと思っています。 – CBroe

+0

'City VARCHAR(45)' - http://www.fun-with-words.com/longest_place_names.html – CBroe

+0

シティを別の表ではなく住所の属性にすることを検討します。ユーザーが自分ですべての可能な都市のリストを生成しようとするのではなく、この詳細を自分で記入させてください... –

答えて

1
  • 、 "国コード" を標準の2文字を使用して "COUNTRY_ID" のために4バイトINTを使用しないでください。それはより小さく、JOINを避けます。

  • 「都市」をアドレスから分割する必要はあまりありません。問題に十分なスペースを確保したり、「正規化」には役立ちません。

ので、AddressCountryCityを兼ね備えています。

  • 1:1の関係を持つことはほとんどありません。ほとんどの場合、2つのテーブルを1つにマージするほうがよいでしょう。私はBuildingAddressを考えています。

  • 10億のフロアがありますか? 1バイトのTINYINT UNSIGNEDが適切な場合は、4バイトのINTを使用しないでください。 SMALLINT UNSIGNED(2バイト、0..65535の範囲)も参照してください。

  • DECIMAL(6,4)/(7,4)はすべて緯度/経度に必要です。小数点第8位は微視的な距離になっています。

  • CHARACTER SETを選択します。 country_code(おそらく)postal_codeは、世界中でasciiになります。 (私は間違っている可能性があります - バングラデシュはナンバープレートに非アラビア数字を使用しています)あなたが本当に国際的な場合、他のVARCHARsはおそらくutf8mb4になるはずです。

スキーマを思い付くために似たような質問がたくさん読んでいるのは良いことです。彼らが初心者であったことは残念です。