【初心者向け】クソデータベース設計をしないためのテクニック5選

Поділитися
Вставка
  • Опубліковано 13 жов 2022
  • 【エンジニアチャンネル公式Twitter】
    / engr_channel
    【小川 Twitter】
    / ogaaryo
    【粟島 Twitter】
    / masayan0911
    【前田 Twitter】
    / shinnosuke_324
    -----------------------------------------------------------------------
    プロフィール
    -----------------------------------------------------------------------
    ■エンジニアチャンネル
    ✅IT業界の裏事情・オフレコトーク ✅転職・就職・キャリア戦略 ✅効率的な学習方法を中心に「エンジニアになりたい方」や「IT業界で成長したい方」に向けた情報を発信しています。
    ■小川亮(おがわりょう)
    株式会社エンジニアチャンネル 代表取締役社長
    ベンチャー企業の取締役CTOとして組織・サービス両面のリーダーとして活動後、フリーランスを経て起業。
    プログラミング学習、転職・就職・キャリア戦略などの豊富な相談実績に基づき今日から使えるハウツーを発信。
    ■粟島正俊(あわしままさとし)
    株式会社テックファクトリー 代表取締役社長
    エンジニアとしてキャリアをスタート。ベンチャー企業のCTOとしてサービス開発全般を行う。
    フリーランスを経て、株式会社テックファクトリーを起業。自社サービスで稼ぐプロとして、エンジニアとビジネスの観点を織り交ぜて発信。
  • Навчання та стиль

КОМЕНТАРІ • 42

  • @user-bq6ec2ju5j
    @user-bq6ec2ju5j Рік тому +6

    勉強になりました。このシリーズ継続して見たいです!!

  • @somezero9402
    @somezero9402 Рік тому +15

    これすごくいいです。
    判断力がつきますよね!
    単に教科書的に正解だけを示す、というものではなく、作り手の「考えながら判断し、結論する」という、センスを培えるものなので、エンジニアではない自分にとって貴重な学び材料です

  • @xenisound
    @xenisound Рік тому +9

    初めてこちらのチャンネル拝見します。
    こういうのって経験知ですよね。
    右の方がお歳を召されてる分、問題単体だけじゃなくて業務想定も含めた回答になっていて流石だと思いました。

  • @user-yp2ei1li8c
    @user-yp2ei1li8c Рік тому +5

    最後のはどっちが良いか難しいよね。
    結局は要件や仕様次第だけど、中間テーブル作るとデータ構造も処理も複雑になりやすいし。

  • @user-vz3mg3ve3z
    @user-vz3mg3ve3z Рік тому

    これむっちゃくちゃ助かります

  • @mamemameomame1
    @mamemameomame1 2 місяці тому +1

    正規化の具体例参考になります。

  • @KentaroxKondo
    @KentaroxKondo Рік тому

    勉強になりました!ありがとうございます!

  • @bakab00n
    @bakab00n 5 місяців тому +3

    受注テーブルなのか明細テーブルなのかがよく分かりませんが、受注テーブルらならば
    受注IDだけでなく品目カラムが入るのもおかしいし、明細テーブルならば、品目が複数
    入る可能性があるので受注IDはそのままで問題なく、むしろ数量カラムが無いのがおかしいです

  • @roprim8969
    @roprim8969 Рік тому

    ちょうどDBの勉強していたので面白かったです!

  • @user-ff9un5zb6x
    @user-ff9un5zb6x Рік тому +8

    1問目について、ちょっと本題から逸れるけど、顧客の大部分が法人のデータベース作るなら、メンテナンス用に法人番号も記録しといた方が便利だと思う。
    法人番号が分かれば、国税庁の公開データベースから法人名、名称フリガナ、本店所在地、郵便番号等が照合できるし、法人が解散した情報も調べられる。

  • @user-lk8pf2ke3t
    @user-lk8pf2ke3t Рік тому +2

    普通の人は話しながら理解するのがすごいよな

  • @mercantilism954
    @mercantilism954 4 дні тому +1

    アメリカでデータ分析の仕事をしています。
    3:41 はfact tableの可能性もありますから一概に言えないかもですね。私はIDと品目コードの違いがleading zerosがあるかないかの違いしかない方が問題かと思います。

  • @kanayantopic8945
    @kanayantopic8945 Рік тому +2

    このシリーズ好きです!これからもお願いします

  • @Donarudo00
    @Donarudo00 Рік тому +11

    全員白Tなのちょっとおもろい

  • @Everredphd
    @Everredphd Рік тому +1

    顧客IDは同じ顧客が複数できた場合(話に出ていた拠点など)に同じIDを振った方が管理しやすい。そうすると、ユニークなIDじゃなくなるから、別途ユニークなIDも入れた方がよさそう。

  • @LetsFeelAllRight
    @LetsFeelAllRight Рік тому +6

    受注テーブルにはサロゲートキー残した方がいいと思うなぁ〜
    むしろ複合キーの採番が同じとこから来てないか心配になるw

  • @user-bz6pc8eu3h
    @user-bz6pc8eu3h Рік тому +1

    0:01 そのまま「3人合わせて、パヒュームです」が始まるのかと思った

  • @gonzalez_shimono
    @gonzalez_shimono Рік тому +15

    次はnoSQLのDB編待ってます!

  • @silverlining9891
    @silverlining9891 2 місяці тому

    他の方々のコメント同様、とても勉強になりました、ありがとうございます!
    「達人に学ぶDB設計」を読みましたが、私には動画で学ぶほうが頭に入りやすいようで、助かります。
    シリーズ化して、動き(アニメーション)付きの図解で、いろいろなバッドノウハウ、グレーノウハウのクイズ&解説をしていただけたら嬉しいです!

  • @user-ke1sg2jf4y
    @user-ke1sg2jf4y Рік тому +4

    後ろの男の子が置物になっている。経験が少ない人(のように見える)がどのように考えているのかを見せてほしい。
    前のお兄さんだけが正解を一直線に答えてしまっているのがもったいない。

  • @user-hm4qg7kv6d
    @user-hm4qg7kv6d Рік тому

    面白いテーマでした。
    「中間テーブル」の件ですが、これが必要になるときは「多対多」のリレーションになる時のみ必要になる、という認識で合っていますか?

  • @naoya3350
    @naoya3350 Рік тому +1

    勉強になりました!REST API でもやって欲しいです🙏

  • @manabu5057
    @manabu5057 Рік тому

    タイトルがいいですね笑

  • @user-bj5je6rj5t
    @user-bj5je6rj5t Рік тому +1

    初心者が考えるにはいい問題だと思ったけど
    受注IDは桁数少なすぎて重複は有り得ると思う。
    年ごとにテーブル分けてるのはレコード件数次第でbeforeの方が良い場合もあるよね。

  • @Everredphd
    @Everredphd Рік тому +2

    2問目、再表示時にソートを再現できないのも結構大きい問題。

  • @akhiro7944
    @akhiro7944 Рік тому +7

    これ、IDの話のとこのやつ、そもそも受注IDは品目コードを保有するなら受注IDは「一意」になることはないんじゃないですかね
    これだと、1受注に複数の商品をまとめて発注(受注)することに対応できない、、、
    受注IDというより、売上IDとかなら、、、
    と問1にもあった「意図が伝わる項目名」も大切ですね

    • @nashi.2279
      @nashi.2279 Рік тому +1

      当たり前ですけど、1つの注文で複数の商品を購入できるか否か?っていう業務要件によって適切なDB設計は変わるのでこの情報だけじゃなんとも言えないですよね
      1 vs nなら受注と受注明細テーブルに分けて、受注番号だけでは受注明細が一意にならないので明細番号(受注番号毎の通し番号)みたいなものが必要ですし、1vs1しかありえないのであればこのafterが適切な設計になりそうですね

    • @Kanagishi-s
      @Kanagishi-s Рік тому +5

      ​ @Nash I. 受注IDと品目IDが1対1で紐づくのであればそもそもafterで品目コードを含めた複合主キーである必要はなく受注IDだけを主キーにすればいいので1つの受注IDに対して品目が最大複数あることは確定ですね。
      ここでは簡略化されているみたいですが、流石に普通なら最低でも受注日や受注会社くらいは保持していて、かつそれらは受注IDのみに依存している可能性が高いので(絶対とはいいませんが)1 vs nならと仰ってるように明細テーブルを作って品目コードはそっちに入れるのが適切なんじゃないかと思いますね。

    • @user-nn7rm8om9g
      @user-nn7rm8om9g 3 місяці тому

      後日追記
      主キーが「受注ID」のみだと思ったので、当初の疑問が浮かびましたが、
      改めて正解の例を見たら、「受注ID」と「品目コード」の 複合主キー になっているので、
      それであれば、1回の受注で複数品目を受注出来ますね😅

  • @user-pl7jj4di4q
    @user-pl7jj4di4q Рік тому

    23卒情報系学生です。最後の問題の中間テーブルは、FKなのはわかるんですけどPKでもあるんですか?
    PKだとしたらPKカラムは一つのテーブルに1つという認識で勉強してたのでイメージが湧きづらいです。いつか違う問題でもいいので解説していただきたいです。

    • @user-gc1ez5bv8k
      @user-gc1ez5bv8k 5 місяців тому

      横から失礼します、主キー(PK)は一つのテーブルで複数持てる(いわゆる複合主キー)の場合もあると思います!

  • @u-tan.inai-inai-kusoBabaa
    @u-tan.inai-inai-kusoBabaa Рік тому +3

    dynamoDBでこの企画やって欲しいな・・・

  • @e3chicago
    @e3chicago Рік тому +2

    こういうのに正解・不正解はないね。住所を別のテーブルにするかはデータの使い方による。漠然と会社テーブルなら別けてもいいけど、所在地を中心としたデータの使い方であれば住所はそのままで同じ会社でも別の場所であれば別のレコードとする。あと電話番号のハイフン有り無しに関して、すでにあるデータが統一していなければあんまりいじらないほうがいい。ただUIやAPIで何かをベースにフォーマット指定をして、それをもってハイフン無しで保存するのはOK。下手にいじって表示する時に間違ってハイフンを入れたれたりすると後で問題になるから。あと受注IDをPKにするのは止めたほうがいい。(これは動画でも後で触れてますが)

  • @toshiakiendo441
    @toshiakiendo441 Рік тому +3

    こちらのチャンネルで勉強に・・・
    というのは、無理がある。
    確かに、視点としての気づきになる話はありますが、
    動画の中で「正解」と言っている事柄も、必ずしも正解なの?
    と思うケースが多々あります。
    今回はデータベース設計ですが、受注テーブルの話をはじめ、他の方も同様のコメントされていますし、
    コードの見直しの部分でも、正解に対して、えっ?と思うケースが多々。
    あくまでも、開発時の視点を学ぶという程度で観るのが良いかと思います。
    タイトルが「クソ~」としている時点で、煽って視聴数を伸ばそう
    という意図が見え隠れしますし。

  • @tsubasa_km
    @tsubasa_km Рік тому +4

    どうしよう。右の人がイケメソで内容入ってこない。。

  • @SonneClosh
    @SonneClosh Рік тому

    サムネ同じ人3人いるのかと思った

  • @user-jx9gd2km3s
    @user-jx9gd2km3s 9 місяців тому

    右の方の言ってること、実際の業務ではそうなる!ってこと言ってる!から正解が本当の正解ではないような気もする

  • @KT-nj3ho
    @KT-nj3ho Рік тому

    白Tおじさんズ

  • @xtoraranx
    @xtoraranx Рік тому

    最後の問題 ………意味ないから1つのデータベースに入れたら?
    っておもったけど、違う違うそうじゃなーいw
    おかしいところ見つけて矛盾を除去する問題じゃなかったw
    データベースを使えるようにしなきゃいけないんだったw

  • @yyos5238
    @yyos5238 Рік тому +2

    受注テーブルの品目コードのコード体系は、Excelにエクスポートして開くと前0始まりが0落ちするので、0以外の方がいいかなと思いました。
    1001、A001とか。
    外部連携されてくるデータとかなら、変えようが無いですが…

    • @e3chicago
      @e3chicago Рік тому +5

      そういう理由でテーブル設計しないほうがいいよ。

  • @myouganai
    @myouganai 9 місяців тому

    it企業でも蔓延しているク◯エクセルファイルなんとかなんないでしょうかね。
    1対多の観点で情報を管理する概念はDBエンジニア以外には装備されていないんでしょうか。