データベース設計・ER図・正規化 | 中小企業診断士1次試験 経営情報システム

U
U

「データベース設計なんてIT系の話でしょ?」と思っていませんか。実は診断士試験では毎年コンスタントに出題され、正規化・ER図・SQLの基礎を押さえるだけで確実に得点できます。今日は図解とたとえ話で完全攻略します。

目次

データベースの種類と特徴

📌 まずここを押さえる

データベースとは「データを体系的に格納・管理・検索できる仕組み」です。ファイルにバラバラに保存するのではなく、構造化して管理することで、複数のシステムが共有・更新できるようになります。企業の情報システムはほぼ必ずデータベースを中核に持っており、診断士として情報戦略を語るうえで不可欠な知識です。

データベースには複数の種類がありますが、試験で中心となるのはリレーショナルデータベース(RDB)です。それぞれの特徴を比較しておきましょう。

種類構造の特徴代表的な製品・用途試験での出題
リレーショナル型(RDB)表(テーブル)形式。行と列で管理。SQLで操作Oracle・MySQL・PostgreSQL◎ 最頻出。正規化・SQLが毎年出題
階層型ツリー構造(親子関係)。上位から下位へ一方向にのみたどれるIBM IMS(旧来の大型システム)△ 定義問題で稀に登場
ネットワーク型メッシュ構造。複数の親を持てる。階層型の制限を緩和IDMS(古い業務システム)△ 階層型との比較問題
オブジェクト指向型オブジェクト単位で管理。メソッドも保持できるdb4o・ObjectDB△ 概念問題
NoSQL(非リレーショナル)キー・バリュー/ドキュメント/グラフ型など多様な形式MongoDB・Redis・DynamoDB○ 近年増加中。RDBとの使い分け問題

リレーショナル型が主流になった理由は「データの冗長性排除・整合性保証・SQLによる標準化」の3点です。異なるベンダーのDBでも共通のSQL言語で操作できる標準化は、システム開発コストを大幅に下げました。一方でNoSQLはビッグデータ・高速書き込み・非構造化データの処理に強みを持ち、SNSやIoTシステムで活用が広がっています。

⚠️ 試験の視点:「なぜRDBが主流になったか」という本質を理解しておくと記述問題でも使えます。RDBの弱点(大量書き込み・スキーマ変更の困難さ)とNoSQLの優位性をセットで説明できると、情報戦略の問題でも応用できます。

ER図(実体関連図)の構成要素とカーディナリティ

ER図(Entity-Relationship Diagram)は、データベースの論理設計を視覚化するための図です。「どんなデータが存在し、どう関係しているか」を設計段階で整理するために使います。プログラムを書く前にER図を描くことで、後から設計変更が発生するリスクを大幅に減らせます。

エンティティ(Entity)

管理対象となる「もの」や「こと」。長方形で表す。
例:顧客・商品・注文・社員
→ テーブルに対応する

リレーションシップ(Relationship)

エンティティ間の関係。ひし形または線で表す。
例:「顧客が注文する」「商品が注文に含まれる」
→ 外部キーや中間テーブルに対応

属性(Attribute)

エンティティが持つ特性。楕円で表す。
例:顧客ID・氏名・生年月日
→ テーブルの列(カラム)に対応

主キー(Primary Key)

エンティティを一意に識別する属性。下線で表す。
例:顧客ID・注文番号
→ NULL不可・重複不可の制約が付く

外部キー(Foreign Key)

外部キーは別テーブルの主キーを参照する列です。テーブル間の関係を実装する際の核心的な仕組みです。例えば「注文テーブル」の「顧客ID」列が「顧客テーブル」の「顧客ID(主キー)」を参照する場合、「注文テーブルの顧客ID」が外部キーになります。外部キー制約を設定すると、「顧客テーブルに存在しない顧客IDを注文テーブルに登録できない」という参照整合性が自動的に保証されます。

カーディナリティ(多重度)

カーディナリティとは、エンティティ間に「何対何の関係があるか」を示すものです。ER図を読む際の最重要ポイントです。

記法意味具体例テーブル設計での対応
1:1(一対一)一方の1レコードに対し、他方も1レコード対応社員と社員証(一人に一枚)同じテーブルに統合 or 外部キーをどちらかに置く
1:N(一対多)一方の1レコードに対し、他方は複数レコード対応顧客(1)と注文(N)「多」側のテーブルに外部キーを置く
M:N(多対多)両方向に複数の対応学生(M)と授業(N)中間テーブル(関連テーブル)を作成して2つの1:Nに分解
💡 M:N の分解が試験の核心

M:N関係は直接テーブル設計できないため、中間テーブルを使って2つの1:N関係に分解します。
例:「学生と授業」→「学生テーブル」「授業テーブル」「受講テーブル(学生ID・授業ID・成績)」の3テーブルに分解。受講テーブルの主キーは「学生ID+授業ID」の複合主キーになります。
M:Nを中間テーブルで分解する問題は試験で頻出です。「注文と商品」「学生と科目」「社員とプロジェクト」のパターンで練習しておきましょう。

ER図の読み取り問題では、線の端にある記号(「1」「N」「M」または鳥の足型のクロウズフット記法)でカーディナリティを読み取ります。「社員は複数の部署に所属できるか」「一つの注文に複数の商品が含まれるか」という現実の業務をそのまま図で表現しているので、業務の常識で判断できます。試験本番でも「この業務では1:Nか?M:Nか?」と自問自答すれば正解に辿り着けます。

正規化の手順——第1〜第3正規形の定義と具体例

📌 正規化とは何か

正規化とは「データの冗長性(同じデータを複数箇所に持つ無駄)を排除し、データの整合性を保ちやすくするためにテーブルを分解する作業」です。正規化しないまま運用すると、次の3種類の異常が発生します。

  • 更新時異常:同じデータが複数行にあり、片方だけ更新して矛盾が生じる
  • 挿入時異常:他のデータがないと新しいデータを挿入できない
  • 削除時異常:削除したくないデータまで一緒に消えてしまう

正規化を理解するための例題テーブル

以下の「注文テーブル」を正規化していきましょう。このテーブルは「1つの注文に複数の商品が含まれる」ケースを想定しています。

注文ID顧客ID顧客名商品ID商品名単価数量
001C01山田太郎P01ノートPC80,0002
001C01山田太郎P02マウス2,0001
002C02佐藤花子P01ノートPC80,0001

問題点:「山田太郎」という顧客名が2行に重複。顧客名を変更したとき1行だけ更新し忘れると矛盾が生じます(更新時異常)。「ノートPC・80,000円」という商品情報も2行に重複しています。これらを正規化で解決します。

1
第1正規形(1NF):繰り返しグループの排除
定義:すべての属性が原子値(それ以上分解できない単一の値)を持ち、繰り返しグループが存在しない

問題のパターン:1つのセルに「商品ID:P01,P02」とまとめて入っているケース
解決:各商品を別の行に分ける。上の例はすでに1NFを満たしています。
主キー:注文ID+商品ID(複合主キー)

1NFを満たさない典型例:「趣味」欄に「読書・テニス・料理」と複数の値が入っている
2
第2正規形(2NF):部分関数従属の排除
定義:1NFを満たし、かつすべての非キー属性が主キー全体に関数従属している(複合主キーの一部への部分従属がない)

問題:主キーは「注文ID+商品ID」ですが…
・「顧客名」は「注文ID」だけに従属(部分関数従属)
・「商品名・単価」は「商品ID」だけに従属(部分関数従属)

解決:部分従属する属性を別テーブルに分離する
注文テーブル(注文ID, 顧客ID)
注文明細テーブル(注文ID, 商品ID, 数量)← 主キーのみに従属
顧客テーブル(顧客ID, 顧客名)
商品テーブル(商品ID, 商品名, 単価)
3
第3正規形(3NF):推移的関数従属の排除
定義:2NFを満たし、かつ非キー属性が他の非キー属性に関数従属していない(推移的関数従属がない)

問題の例:社員テーブル(社員ID, 部署ID, 部署名)
「部署名」は「部署ID」に従属 → 「部署ID」は「社員ID」に従属
→「社員ID → 部署ID → 部署名」という推移的従属が発生

解決:部署テーブル(部署ID, 部署名)を別テーブルに分離
社員テーブル(社員ID, 部署ID)
部署テーブル(部署ID, 部署名)
正規形解消する問題キーワード試験頻度
第1正規形(1NF)繰り返しグループ・複数値属性原子値・単一値
第2正規形(2NF)部分関数従属複合主キーの一部への従属◎◎
第3正規形(3NF)推移的関数従属非キー属性間の従属関係◎◎
ボイスコッド正規形(BCNF)候補キーへの従属漏れ決定項が必ず候補キー
⚠️ 正規化のデメリットも必ず押さえる:テーブルを分解しすぎると、データを取得する際にJOIN(結合)が多くなりパフォーマンスが低下します。実務では「性能要件に応じた逆正規化(非正規化)」を意図的に行う場合もあります。試験でもこの観点が問われます。正規化は「整合性 vs 性能」のトレードオフを意識した設計判断です。

関数従属とは——正規化の数学的基礎

「属性AがBを決定する(A→B)」とは、Aの値が決まるとBの値が一意に決まる関係です。例えば「顧客ID → 顧客名」は顧客IDが決まれば顧客名も決まるという関数従属です。逆に「顧客名 → 顧客ID」は成立しません(同姓同名の人がいる可能性があるため)。この一方向性が関数従属の本質です。

SQLの基本文——SELECT・JOIN・GROUP BY

診断士試験ではSQLの深い知識よりも「何をするための命令か」を理解していれば十分です。各句の役割を体系的に整理します。

基本SELECT文の構造

💡 SELECT文の骨格(実行順序に注意)
SELECT  列名1, 列名2       -- ⑥ どの列を取得するか
FROM    テーブル名           -- ① どのテーブルから(最初に実行)
WHERE   条件式              -- ② どんな条件で絞るか(集計前の行絞り込み)
GROUP BY グループ化の列     -- ③ 何でグループ化するか
HAVING  集計後の条件        -- ④ 集計結果の絞り込み(集計後の絞り込み)
ORDER BY 並び替えの列       -- ⑤ どの順で並べるか

記述する順序と実行順序が異なることが重要です。WHEREは「集計前」、HAVINGは「集計後」という違いを必ず覚えてください。

SQL句・コマンド役割使用例試験でのポイント
SELECT取得する列を指定SELECT 氏名, 売上SELECT * は全列取得。SELECT DISTINCTで重複排除
FROM対象テーブルを指定FROM 顧客テーブル複数テーブルのJOIN時に重要
WHERE行の絞り込み条件(集計前)WHERE 売上 > 100000LIKE演算子(パターン一致)・BETWEEN・IN・IS NULL
INNER JOIN共通キーで2つのテーブルを内部結合FROM A INNER JOIN B ON A.id=B.id内部結合=両方に存在する行のみ取得
LEFT OUTER JOIN左テーブル全行+右テーブルの一致行FROM A LEFT JOIN B ON A.id=B.id外部結合=一方に存在しない行もNULLで保持
GROUP BY特定列でグループ化して集計GROUP BY 部署IDCOUNT・SUM・AVG・MAX・MINの集計関数と組み合わせる
HAVINGGROUP BY後の集計結果を絞り込み(集計後)HAVING COUNT(*) > 5WHEREとHAVINGの違いが最頻出!
ORDER BY結果の並び順を指定ORDER BY 売上 DESCASC=昇順(小→大)、DESC=降順(大→小)

JOINの種類——図解で理解

INNER JOIN(内部結合)

両方のテーブルに存在するレコードのみ結果に含む。最も基本的な結合。「顧客テーブルと注文テーブルを結合して注文した顧客だけ取得」

LEFT OUTER JOIN(左外部結合)

左テーブルの全レコードを保持。右テーブルに対応がなければNULL。「全顧客リストに注文情報をつける(注文なしの顧客もNULLで表示)」

RIGHT OUTER JOIN(右外部結合)

右テーブルの全レコードを保持。左テーブルに対応がなければNULL。LEFT JOINで左右のテーブルを入れ替えたものと同等。

FULL OUTER JOIN(完全外部結合)

両テーブルの全レコードを保持。対応がない側はNULL。「全顧客と全注文を取得し、どちらにも存在しないものをNULLで表示」

⚠️ WHEREとHAVINGの違いを絶対に覚える
WHERE:GROUP BY の「前」に実行される。個々の行に対する絞り込み。集計関数は使えない。
HAVING:GROUP BY の「後」に実行される。グループ(集計結果)に対する絞り込み。
例:「売上合計が100万円以上の部署」→ HAVING SUM(売上) >= 1000000
例:「売上が50万円以上の行を集計対象にしたい」→ WHERE 売上 >= 500000(集計前の行絞り込み)

サブクエリ(副問合わせ)

SELECT文の中に別のSELECT文を入れ子にしたものをサブクエリと言います。「平均売上より高い売上の社員を抽出する」ような場合に使います。内側のSELECT(サブクエリ)が先に実行され、その結果を外側のSELECTが使います。試験では「WHERE 売上 > (SELECT AVG(売上) FROM 売上テーブル)」のような形式で出題されます。

インデックスの仕組みと効果

📌 インデックス(索引)とは

テーブルの特定列に対して索引を作成し、検索を高速化する仕組みです。本の巻末の索引と同じ発想で、「どのページに何が書いてあるか」を先に索引で調べることで、全ページをめくらずに目的のデータに到達できます。データが1,000万行あっても、インデックスがあれば数十ミリ秒で検索できます。

インデックスなしの場合、SQLはテーブルの全行を先頭から順に走査します(フルテーブルスキャン)。1,000万行のテーブルで「顧客ID=12345」を探すためにすべてを確認する必要があります。インデックスがあると、B木構造(バランスド・ツリー)を使って対数時間(O(log n))でアクセスできます。

観点インデックスありインデックスなし
SELECT(検索)速度◎ 大幅に高速(特に大きなテーブル)△ テーブルが大きいほど遅い
INSERT/UPDATE/DELETE速度△ やや遅くなる(索引の更新が必要)◎ 速い
ストレージ使用量△ 索引データ分だけ追加で必要◎ 必要最小限
適した列WHERE句・JOIN条件・ORDER BY で頻繁に使う列
更新頻度が低くカーディナリティが高い列
更新頻度が高い列
カーディナリティが低い列(例:性別フラグ)

インデックスが効果的な条件・効果がない条件

インデックスが有効なケース
  • WHERE句で等価比較や範囲比較(=、<、>、BETWEEN)
  • JOIN条件の結合キー列
  • ORDER BY や GROUP BY で使う列
  • 選択性が高い列(カーディナリティが大きい列:顧客ID・注文番号など)
インデックスが無効になるケース
  • WHERE句で関数を使った場合(WHERE UPPER(名前) = ‘YAMADA’)
  • 前方一致以外のLIKE検索(LIKE ‘%太郎’)
  • 選択性が低い列(性別・フラグ類:どうせ半数の行がヒットする)
  • テーブルの行数が極端に少ない場合
⚠️ インデックスの過剰設定は禁物:全列にインデックスを貼ると、更新処理(INSERT・UPDATE・DELETE)のたびにすべてのインデックスを更新する必要があり、かえってパフォーマンスが低下します。「よく検索するが更新は少ない列」に絞って設定するのが原則です。試験では「インデックスの設定が適切かどうか」を問う判断問題も出題されます。

トランザクション管理とACID特性

📌 トランザクションとは

「1つの論理的な処理単位」として扱う一連のSQL操作のことです。銀行振込を例にとると、「A口座から1万円を引く」「B口座に1万円を足す」という2つの操作は、必ず両方成功するか両方失敗するかでなければなりません。片方だけ成功するとお金が消えたり増えたりしてしまいます。この「不可分な処理のまとまり」がトランザクションです。

トランザクションの正しさを保証するための4つの性質がACID特性です。これは頭文字を取った略語で、試験では各特性の英語名・日本語名・意味の3点セットで問われます。

頭文字英語名日本語名意味具体例
AAtomicity原子性トランザクション内のすべての操作は「全て成功」か「全て失敗(ロールバック)」のどちらか。中途半端な状態は許されない振込中にシステム障害→両方の更新を取り消す(ロールバック)
CConsistency一貫性トランザクション前後でデータは常に整合した状態(定義された制約や整合性ルール)を保つ残高がマイナスにならない制約が常に満たされる
IIsolation独立性(隔離性)並行して実行される複数のトランザクションは互いに干渉しない。他のトランザクションの途中状態を見えないようにする同時に2人が同じ在庫を注文しても矛盾が起きない
DDurability耐久性(永続性)コミット(確定)したトランザクションは、その後に障害が起きても消えない。永続的に記録されるコミット後に停電→再起動後もデータは保持される

コミットとロールバック

COMMIT(コミット)

トランザクション内の全操作を確定させること。コミット後はデータが永続化される(Durabilityの保証)。コミットを実行するまでは他のトランザクションから変更が見えない(Isolationの保証)。

ROLLBACK(ロールバック)

トランザクション内の操作を全て取り消してトランザクション開始前の状態に戻すこと。エラー発生時に自動実行される場合が多い。Atomicityを実現するための仕組み。

排他制御(ロック)

複数のトランザクションが同時に同じデータを更新しようとすると、データの整合性が崩れます。これを防ぐのが排他制御です。ロックは「このデータを今私が使っているから他は触らないで」という旗印です。

ロックの種類特徴他トランザクションとの関係用途
共有ロック(Sロック)読み取り専用のロック他の共有ロックとは共存可能。排他ロックとは競合SELECTのみ実行する場合
排他ロック(Xロック)読み書き両方をロック他のすべてのロックと競合(自分しかアクセスできない)UPDATE・DELETE・INSERT時
⚠️ デッドロックとは:2つのトランザクションが互いに相手が持っているロックの解放を待ち続けて、どちらも処理を進められなくなる状態。例:TXAがテーブルAをロック→テーブルBをロック待ち、TXBがテーブルBをロック→テーブルAをロック待ち(永遠に解放されない)。DBMSが自動検出して一方を強制ロールバックすることで解決します。

試験対策——頻出論点の総まとめ

診断士試験での出題パターンを分類し、確実に得点できる論点を整理します。過去問を分析すると、正規化の判定・ER図のカーディナリティ・ACID特性が最も頻繁に出題されています。

出題パターン主な論点正解の決め手
正規化の判定「このテーブルは第何正規形か」「どの属性が問題か」部分関数従属(2NF)か推移的従属(3NF)かを見極める
ER図の読み取りカーディナリティの識別・M:Nの分解「顧客1人が複数注文できる→1:N」を業務常識で判断
SQL穴埋め適切な句・演算子の選択WHEREとHAVINGの使い分け・JOINの種類
ACID特性の組合わせ各特性の正しい説明の選択Isolation=独立性(隔離性)の日本語が揺れるので英語名で覚える
インデックスの効果検索速度向上・更新速度低下のトレードオフ「更新頻度が高い列にインデックスを設定すると更新が遅くなる」
トランザクション管理コミット・ロールバック・デッドロックロールバック=Atomicity保証、コミット=Durability保証

正規化の各形式——1行で覚える定義

💡 暗記用まとめ

1NF(第1正規形):「繰り返しグループを排除」→ 各セルに1つの値(原子値)
2NF(第2正規形):「部分関数従属を排除」→ 複合主キーの一部への従属を別テーブルに分離
3NF(第3正規形):「推移的関数従属を排除」→ 非キー属性間の従属関係を別テーブルに分離
ACIDAtomicity(原子性)・Consistency(一貫性)・Isolation(独立性)・Durability(耐久性)

特に2NFと3NFの違いは頻繁に問われます。2NF=複合主キーが前提・部分従属が問題3NF=単純主キーでも発生・非キー間の従属が問題と覚えておくと区別しやすいです。

よくある質問(FAQ)

Q1. 正規化は第3正規形まで覚えれば試験は大丈夫ですか?
はい、診断士試験では第3正規形(3NF)までの理解で対応できます。ボイスコッド正規形(BCNF)や第4・第5正規形は出題されることがほぼなく、3NFの正確な定義と具体例(「推移的関数従属の排除」)を説明できれば十分です。ただし、正規化のメリット(整合性向上・冗長性排除)とデメリット(JOINによるパフォーマンス低下・設計複雑化)のトレードオフも把握しておきましょう。実務では「3NFまで正規化した後、パフォーマンス要件を理由に意図的に非正規化する」という設計判断もあります。
Q2. ER図でカーディナリティを読み取る際のコツはありますか?
「業務の常識で考える」が最大のコツです。「1人の顧客は複数の注文を持てるか?」→ YES → 顧客:注文 = 1:N。「1つの注文に複数の商品が含まれるか?」→ YES → 注文:商品 = M:N(中間テーブルが必要)。図の記号(バーベル記法やクロウズフット記法)は試験によって異なりますが、エンティティ間の線の端に「1本線か多線か」で読み取れます。実務の業務フローを頭でイメージしながら読むと混乱しません。クロウズフット(鳥の足)記法では「分岐した線 = 多(N)」、「縦線 = 1」と覚えてください。
Q3. WHEREとHAVINGはどちらを使うべきか、素早く判断する方法は?
「集計関数(COUNT・SUM・AVG等)を使った条件かどうか」で判断します。集計関数を使うならHAVING、そうでなければWHERE。例:「売上が100万以上の行」→ WHERE 売上 >= 1000000。「部署ごとの売上合計が100万以上」→ HAVING SUM(売上) >= 1000000。WHEREはGROUP BYの前に実行され個々の行を絞り込む、HAVINGはGROUP BYの後に実行されグループを絞り込む、という処理の順序を覚えると間違えません。試験ではWHEREとHAVINGを入れ替えて「どちらが正しいか」を問う選択問題が多いです。
Q4. ACID特性のIsolation(独立性)が「隔離性」とも呼ばれるのはなぜですか?
「Isolation」の日本語訳が文献によって「独立性」「隔離性」「分離性」と揺れているためです。どの訳語でも意味は同じで「並行して実行される複数のトランザクションが互いに干渉しない」という性質を指します。試験では英語(Isolation)と意味をセットで覚えておけば、日本語訳がどれであっても対応できます。「他のトランザクションの途中状態が見えない」というイメージが本質です。
Q5. NoSQLデータベースはなぜ近年注目されているのですか?
大量データ(ビッグデータ)・高頻度アクセス・非構造化データへの対応が主な理由です。RDBは厳格なスキーマ(表の設計)と正規化を前提とするため、SNSのタイムライン・IoTセンサーデータ・ログデータのような「構造が不定で大量に高速に書き込まれるデータ」には不向きです。NoSQLはスキーマレス(柔軟なデータ構造)・水平スケールアウト(サーバーを追加して性能向上)が強みです。ただし、ACID特性の一部を犠牲にして性能を得る設計(BASE特性)もあり、用途に応じた使い分けが求められます。診断士試験では「RDBとNoSQLの使い分け」という形で問われることが増えています。
Q6. インデックスを設定するとなぜ更新が遅くなるのですか?
インデックスはB木(バランスド・ツリー)などのデータ構造で管理されており、テーブルのデータが変更されるたびにインデックスも合わせて更新する必要があるためです。1つのINSERT/UPDATE/DELETE操作に対して、設定されているインデックスの数だけ追加の更新処理が発生します。そのため、書き込みが頻繁なテーブルに多数のインデックスを設定すると、書き込みパフォーマンスが著しく低下します。「読み取りが多く書き込みが少ない列」に絞ってインデックスを設定するのが正しい設計です。また、カーディナリティが低い列(性別など値の種類が少ない列)にインデックスを張ってもあまり効果がありません。
Q7. 第2正規形と第3正規形の違いを簡潔に説明してください
「誰への従属か」の違いです。第2正規形の問題は「複合主キーの一部(部分)への従属」です。例:(注文ID, 商品ID)という複合主キーで、顧客名が注文IDだけに従属している場合。2NFは複合主キーがある場合に発生する問題です。第3正規形の問題は「非キー属性から別の非キー属性への従属」(推移的従属)です。例:社員ID→部署ID→部署名のように、主キーでない属性(部署ID)を介して別の属性(部署名)が間接的に主キーに従属する場合。3NFは単純主キー(複合でない)のテーブルでも発生します。2NFは「複合主キーの一部への従属」、3NFは「非キー→非キーの従属」という図式で整理してください。

データベース設計・ER図・正規化は、経営情報システムの中でも得点しやすい分野です。正規化の各形式の定義(1NF:繰り返し排除、2NF:部分従属排除、3NF:推移的従属排除)とACID特性(原子性・一貫性・独立性・耐久性)を正確に覚えることで、確実に2〜3点を確保できます。ER図はカーディナリティを業務の常識で判断し、M:Nは中間テーブルで分解するという原則を押さえておきましょう。SQLのWHEREとHAVINGの使い分け、インデックスのトレードオフも頻出論点です。丁寧に理解を積み重ねて、本試験で確実に得点につなげてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

中小企業診断士試験勉強中のアラフィフシングルマザーです。
大学卒業後から現在まで、数々の失敗をしながらずっと自営業として試行錯誤を重ねてきました。
もっときちんと経営やビジネスの知識を身につけて、将来は他の事業者の方のお役にも立てたらいいな、と思うようになり、中小企業診断士の試験に挑戦中です。

目次