2026-09-03 追記: この原稿は一時ディレクトリにしか存在せず、消えると復元できない状態でした。 リポジトリへ移動しています(元:
scratchpad/share/CONTENT.md)。 PDF はこの原稿からdocs/handoff/pdf/make_ddl_review_pdf.pyで生成します。 生成物の検査はdocs/handoff/pdf/check_ddl_review_pdf.py。詳細はdocs/handoff/pdf/README.md。 第2回の原稿はdocs/handoff/TeamWorks確認事項_第2回_20260903.mdです。
宛先: TeamWorks(DB開発側) 差出: DFA Robotics 作成日: 2026-09-03 表題: 実DDL照合結果と確認事項
2026-09-02 付でご提供いただいた clean_watch_20260902.sql(CREATE TABLE 39個)を、 こちらで手書きしていた Prisma スキーマと機械的に照合しました。
照合は独立した2つの方法で行い、結果が一致することを確認しています。
prisma db pull で生成したスキーマと比較差分は49件でした。そのうち 42件はこちらで実DDLに合わせるだけで完結します。 本書には、こちらだけでは判断できない3件と、共有しておきたい3件、 および仕様の確認1件を記載しています。
| 区分 | 件数 | 性質 |
|---|---|---|
| A. 合意が必要 | 3件 | 返答が無いと実装を決められない |
| B. 情報共有 | 3件 | 返答は必須でない。DB側でしか対処できないものを含む |
| C. 仕様確認 | 1件 | 以前の合意事項の解釈 |
こちらで完結する42件については本書に記載していません。
最も影響が大きい項目です。
実DDL の状態:
`id` varchar(50) NOT NULL, -- 主キーでも UNIQUE でもない。制約なし `error_id` varchar(50) NOT NULL, UNIQUE KEY `robot_error_reports_report_id_unique` (`error_id`)
PRIMARY KEY が定義されておらず、一意制約は error_id のみです。
一方こちらの API 契約と型定義は次のようになっています。
PrecheckItem.id : number
PATCH /prechecks/{id}/status
具体的な帰結です。アラート一覧で担当者が「対応中」を押すと、画面は id を送ります。しかし、
このため対応状況の更新(PATCH)が設計として成立しません。
伺いたいこと:
clean_status_histories の状態:
`id` bigint unsigned NOT NULL, -- AUTO_INCREMENT ではない UNIQUE KEY `clean_status_histories_id_unique` (`id`)
PRIMARY KEY が無く、AUTO_INCREMENT も付いていません。一方で UNIQUE 制約はあります。
これが元テーブル clean_statuses.id を引き継ぐ設計だとすると、 1つの清掃状態につき履歴を1件しか作れません。 履歴テーブルとしては不自然に見えるため、意図を確認したいです。
clean_timetable_histories.id も同様に AUTO_INCREMENT がありません。
伺いたいこと:
こちらが検証用のダミーデータを作る際に、採番方法が決まらないと投入できません。
先の確認事項 B-6 について、次のようにご回答いただきました。
typo です。contact_type は unsigned tinyint とします。email は varchar(100) とします。
いただいた DDL(2026-09-02 付)には、まだ反映されていないようです。
| カラム | ご回答 | 実DDL |
|---|---|---|
| customer_contacts.contact_type | unsigned tinyint | bigint unsigned |
| customer_contacts.email | varchar(100) | varchar(100)(一致) |
| facility_contacts.contact_type | unsigned tinyint | tinyint unsigned(一致) |
| facility_contacts.email | varchar(100) | varchar(255) |
顧客側と施設側で型が食い違った状態が残っています。
伺いたいこと:
prisma db pull の差分に出るため追随できます)なお customer_contacts.contact_type が bigint の場合、 こちらでは JavaScript の bigint 型として受け取ることになり、 JSON へ変換する際に明示的な数値変換が必要になります(実装側で対応します)。
返答は必須ではありません。こちらは現状のまま実装を進められます。
定義書では fk と記載されているものの、実DDL に制約が見当たりませんでした。
| テーブル | カラム | 定義書上の参照先 |
|---|---|---|
| clean_statuses | clean_timetable_id | clean_timetables(id) |
| clean_status_histories | clean_timetable_id | clean_timetables(id) |
| robot_task_versions | clean_schedule_id | clean_schedules(id) |
意図的なものか、付け忘れかをご確認いただければ幸いです。 付け忘れであれば DB 側で追加いただくのが適切と考えます。 意図的であれば、こちらは参照先が存在しない行(孤児行)を想定した実装にします。
返答をお待ちせず、孤児行を想定した実装で進めます。
robot_task_versions.clean_schedule_id にインデックスがありません。 外部キーも無いため、MySQL による自動作成も行われていません。
この列で絞り込む検索が全件走査になります。 300施設分のタスク履歴が積み上がるテーブルのため、 運用が進むにつれて表示が遅くなることが見込まれます。
こちら側に回避手段がないため、DB 側でのご対応をお願いしたい項目です。
| テーブル | カラム |
|---|---|
| clean_task_reports | created_at, updated_at |
| security_status_histories | reported_at |
いずれも timestamp NOT NULL ですが DEFAULT 句がなく、 INSERT 時に明示的な値の指定が必要です。
アプリ側で時刻を管理する設計であれば意図的と理解しますが、 created_at に既定値が無いのは珍しい形のため念のため共有します。
こちらは参照のみのため実装への影響はありません。
こちらの実装規約では、行展開アドバイスの規則を次のように定めています。
R3 = 完了率が△以下の状態が2日以上連続 R4 = 出発失敗 または △以下 の状態が3日以上連続
R3 と R4 で条件を書き分けていますが、実装は両方とも 「連続問題日数」という1つの値を見ており、区別できません。
さらに連続問題日数の定義が「△以下 または 出発失敗」であるため、 現状では2日連続の出発失敗で R3 が発火します。
伺いたいこと:
後者の場合、連続日数を「△以下のみ」と「出発失敗を含む」の2種類に分けて 数える必要があるため、実装方針が変わります。
いただいた DDL により、こちらで保留していた判断が確定しました。あわせてご報告します。
| 保留していた事項 | DDL での確認結果 |
|---|---|
| 対応日時のカラム名 | responded_at(正しい綴り)。定義書の responsed_at は誤記と確定 |
| control_reports のシリアル番号 | serial_number。定義書の sireal_number は誤記と確定 |
| clean_status の -1 問題 | 実DDL は符号あり tinyint。定義書の型表記が誤りで、備考が正しかった |
| makers テーブル | DDL に存在せず、devices からの外部キーも無し。ご回答どおり |
| controls.facility_id の外部キー | 存在を確認。ご回答どおり |
| clean_timetables.precheck の既定値 | 0(本清掃)。定義書の 9 は誤りと確定 |
| clean_link_schedules | 不要テーブルとご確認済み。link_schedules を参照します |
| section_robot_statuses.indicatived_at | 綴り違いではなく、列自体が廃止されていました |
また、こちらが定義書から手書きしたスキーマは、 28テーブル中12テーブルが実DDLと完全一致していました。 残りの差分も、大半は定義書側の記述と実DDL の食い違いに起因するものでした。
本書の A(3件)についてご回答をいただければ、 対応状況の更新機能とダミーデータによる検証に着手できます。 B・C については実装を止めるものではありませんので、お手隙の際にご確認ください。