Mit_tt
@Mit_tt

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PostgreSQLでの給与DBの作成

解決したいこと

PostgreSQLで自分の給与DBを作ろうとしています。
私以外のデータの登録はありません。

自分で作成したSQLをchatGPTにレビューを依頼したらいくつか修正点が出てきました。

[incomes]や[deductions]テーブルにsalary_idやincome_item_id、deduction_item_idを付与しなければいけないのでしょうか

よろしくお願いいたします。

私が作成したSQL

-- 給与日テーブル
CREATE TABLE salaries (
    id SERIAL PRIMARY KEY,
    salary_date DATE NOT NULL, -- 給与支給日
    salary_type VARCHAR(20) NOT NULL CHECK (salary_type IN ('給与', '賞与')) -- タイプ(給与または賞与)
);

-- 収入勘定項目
CREATE TABLE income_items (
    id SERIAL PRIMARY KEY,
    account_name VARCHAR(100) NOT NULL
);

-- 収入テーブル
CREATE TABLE incomes (
    id SERIAL PRIMARY KEY REFERENCES income_items(id),
    amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);

-- 控除勘定項目
CREATE TABLE deduction_items (
    id SERIAL PRIMARY KEY,
    account_name VARCHAR(100) NOT NULL -- 勘定項目
);

-- 控除テーブル
CREATE TABLE deductions (
    id SERIAL PRIMARY KEY REFERENCES deduction_items(id),
    amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);

chatGPTが出力したSQL

-- 給与テーブル
CREATE TABLE salaries (
    id SERIAL PRIMARY KEY,
    salary_date DATE NOT NULL, -- 給与支給日
    salary_type VARCHAR(20) NOT NULL CHECK (salary_type IN ('給与', '賞与')) -- タイプ(給与または賞与)
);

-- 収入勘定項目
CREATE TABLE income_items (
    id SERIAL PRIMARY KEY,
    account_name VARCHAR(100) NOT NULL
);

-- 収入テーブル
CREATE TABLE incomes (  
    id SERIAL PRIMARY KEY,
    salary_id INTEGER NOT NULL REFERENCES salaries(id), -- salariesテーブルとのリレーション追加
    income_item_id INTEGER NOT NULL REFERENCES income_items(id), -- income_itemsテーブルとのリレーション追加
    amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);

-- 控除勘定項目
CREATE TABLE deduction_items (
    id SERIAL PRIMARY KEY,
    account_name VARCHAR(100) NOT NULL -- 勘定項目
);

-- 控除テーブル
CREATE TABLE deductions (  
    id SERIAL PRIMARY KEY,
    salary_id INTEGER NOT NULL REFERENCES salaries(id), -- salariesテーブルとのリレーション追加
    deduction_item_id INTEGER NOT NULL REFERENCES deduction_items(id), -- deduction_itemsテーブルとのリレーション追加
    amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);

2

1Answer

[incomes]や[deductions]テーブルにsalary_idやincome_item_id、deduction_item_idを付与しなければいけないのでしょうか

カラムの必要性や、毎月どのようなデータを入力することを想定しているかや、それを挿入する際に発行する SQL の例示も ChatGPT に聞いてみてください。また、自分が想定する入力データも提示して質問したほうが精度が上がります(ここで人間に聞くにしてもそうです)。

で、 ChatGPT の提案についてですが、(どのようなデータを入力したいか分からないのでスキーマだけを見て判断すると)「収入」が毎月の「給与」と必ず1対1で対応するということはなさそうなので incomes.salary_id は変な気がします。1つの「収入」が必ずいずれか1つの「収入勘定項目」 に分類され、かつ複数の「収入」が同じ「収入勘定項目」に分類されてよいなら incomes.income_item_id は妥当そうです。 「控除」についても同様です。

2Like

Your answer might help someone💌